毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> net技术 >> 正文

线程间操作无效: 从不是创建控件“label1”的线程访问它

更新时间:2013-1-17:  来源:毕业论文

C#如何实现多线程中的数据绑定
public partial class Form1 : Form     {         public class Test : System.ComponentModel.INotifyPropertyChanged         {             private int m_Count = 0;             public int Count             {                 get { return m_Count; }                 set                {                     m_Count = value;                     NotifyPropertyChanged("Count");                 }             }               public void Begin()             {                 Thread thread = new Thread(Counter);                 thread.Start();             }               private void Counter()             {                 for (int i = 0; i < 1000; i++)                 {                     Count = i;                     System.Threading.Thread.Sleep(100);                 }             }               public void NotifyPropertyChanged(string info)             {                 if (PropertyChanged != null)                 {                     PropertyChanged(this, new PropertyChangedEventArgs(info));                 }             }               #region INotifyPropertyChanged 成员               public event PropertyChangedEventHandler PropertyChanged;               #endregion         }           public Form1()         {             InitializeComponent();             Binding binding = new Binding("Text", t, "Count");             label1.DataBindings.Add(binding);         }           Test t = new Test();           private void button1_Click(object sender, EventArgs e)         {             t.Begin();         }       }

代码当然是报错:线程间操作无效: 从不是创建控件“label1”的线程访问它。

如果不用绑定的方式的话可以Invoke(xxxxx,xxxx)委托来修改控件的属性,但绑定时应该怎么委托呢???请教大伙。
 public class Test : System.ComponentModel.INotifyPropertyChanged {   //加上这句先  SynchronizationContext ctx = SynchronizationContext.Current;   //后面在加上一些处理 public void NotifyPropertyChanged(string info)             {                  //ctx==null表示非线程环境,直接使用标准方式处理                   if (ctx == null)                 {                     PropertyChanged(this, new PropertyChangedEventArgs(info))                                 }                 else                {                      //此处采用上下文同步方式发送消息,你当然也可以使用异步方式发送,异步方法为ctx.Post                     ctx.Send(p => PropertyChanged(this, new PropertyChangedEventArgs(info)), null);                   }                }   }

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。