黑马程序员技术交流社区
标题:
关于多线程的小问题
[打印本页]
作者:
popoluno
时间:
2013-6-15 13:03
标题:
关于多线程的小问题
我第一次使用线程,有这么个问题:我再窗体上放了一个listBox1,创建了两个线程,我再线程中访问这个listBox1的时候,系统说不能跨线程调用控件,这怎么回事 ,怎么解决??
代码如下:
private void Form1_Load(object sender, EventArgs e)
{
//创建线程 需要System.Threading命名空间
Thread t1, t2; // 说明为窗体类成员
t1 = new Thread(new ThreadStart(BackgroundProcess));
t1.Start(); //启动线程t1
}
private void BackgroundProcess()
{
int i = 1;
while (true)
{
// 向列表框增加一个项目
listBox1.Items.Add("Iterations: " + i.ToString());
i++;
Thread.Sleep(2000); // 指定线程休眠的时间
}
}
作者:
许庭洲
时间:
2013-6-15 14:31
Control.CheckForIllegalCrossThreadCalls = false; //跨越线程调用windows控件
作者:
风雪再现
时间:
2013-6-15 14:33
微软自带的有线程间调用的检查,只要关闭这个就可以了,目前我就知道这一种方法
public 客户端()
{
InitializeComponent();
TextBox.CheckForIllegalCrossThreadCalls = false;//关闭线程之间的检查,相信你应该知道这个位置,程序最上面
}
作者:
无__畏
时间:
2013-6-15 16:25
本帖最后由 无__畏 于 2013-6-15 17:00 编辑
int i = 0;
private void Form1_Load(object sender, EventArgs e)
{
//创建线程 需要System.Threading命名空间
Thread t1, t2; // 说明为窗体类成员
t1 = new Thread(new ThreadStart(BackgroundProcess));
t1.Start(); //启动线程t1
}
delegate void FunDel();
private void BackgroundProcess()
{
while (true)
{
Function();
Thread.Sleep(2000);
}
}
private void Function()
{
if (this.listBox1.InvokeRequired)
{
FunDel del = new FunDel(BackgroundProcess);
this.BeginInvoke(del);
}
else
{
i++;
listBox1.Items.Add(i);
}
}
}
复制代码
作者:
aa26963
时间:
2013-6-15 18:49
public Form1()
{
InitializeComponent();
TextBox.CheckForIllegalCrossThreadCalls = false;//加上这句话,关闭跨线程之间的检查。
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2