黑马程序员技术交流社区
标题:
C#多线程的调用问题
[打印本页]
作者:
于振发
时间:
2013-9-28 01:16
标题:
C#多线程的调用问题
本帖最后由 于振发 于 2013-9-28 16:47 编辑
我第一次使用线程,有这么个问题:我再窗体上放了一个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-9-28 07:38
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 Del_Thread();//定义一个委托
///////////////////////////////////////////////////////////////////////////////////////
private void BackgroundProcess()
{
while (true)
{
Function();
Thread.Sleep(2000);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
private void Function()
{
if (this.listBox1.InvokeRequired)
{
Del_Thread del = new Del_Thread(BackgroundProcess);
this.BeginInvoke(del);
}
else
{
i++;
listBox1.Items.Add(i);
}
}
作者:
淡忘回忆
时间:
2013-9-28 11:29
出错原因:线程的调用不能交叉
解决方法:
两种方法:
1.listbox.checkforillegalcrossthreadcalls=false;(不建议使用这种)
2.用委托的方法,楼上已经写了
作者:
☜⑦圊⑥慾➹沼
时间:
2013-9-28 12:35
我试了下沙发的方法,感觉跳入死循环了,出不来。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2