黑马程序员技术交流社区

标题: 急急急。。。如何实现多个线程的互斥访问UI线程中的textBox控件??? [打印本页]

作者: 侯慧杰    时间: 2012-7-8 17:20
标题: 急急急。。。如何实现多个线程的互斥访问UI线程中的textBox控件???
在视频中只讲到了多个线程都访问UI线程某textBox存在的问题,但是没有提出解决方案,我想问一下如何实现多个线程互斥访问textBox控件啊??????
作者: 许庭洲    时间: 2012-7-9 09:21
可以声明一个委托和定义一个delegate的方法来实现多个线程互斥访问textBox控件。
作者: 小高    时间: 2012-7-9 09:28
一,是通过设置
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
在你的程序初始化的时候设置了这个属性,而且在你的控件中使用的都是微软Framework类库中的控件的话,系统就不会再抛出你上面所说的这个错误了。
二,就是委托了,个人建议用这种方法
首先在WinForm窗体中拖入ListBox控件,然后参照以下代码:
Thread t1;//声明一个全局线程 private void Form1_Load(object sender, EventArgs e) { t1 = new Thread(new ThreadStart(BackgroundProcess)); t1.Start(); //开始 } delegate void aa(); private void BackgroundProcess() { // 将委托实例化 aa a= delegate() { for (int i = 0; i < 50; i++) { listBox1.Items.Add("Iterations: " + i.ToString()); Thread.Sleep(300); listBox1.Refresh(); } }; listBox1.Invoke(a); }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2