C#多线程问题,当一个子线程死循环时。为什么主界面不能操作?
在VS2008中用C#建立了一Form。上面有一个按钮和一个列表框。当单击按钮的时候就启动一个线程用于不停的像列表框中添加数据。但主界面就不能操作了。源代码:public...
在VS2008中用C#建立了一Form。上面有一个按钮和一个列表框。当单击按钮的时候就启动一个线程用于不停的像列表框中添加数据。但主界面就不能操作了。
源代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private delegate void SetTextCallback();
private void send()
{
while (true)
{
listBox1.Items.Add("aaaa\n");
}
}
private void test()
{
SetTextCallback stcb = new SetTextCallback(send);
Invoke(stcb);
}
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(test));
th.Start();
}
} 展开
源代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private delegate void SetTextCallback();
private void send()
{
while (true)
{
listBox1.Items.Add("aaaa\n");
}
}
private void test()
{
SetTextCallback stcb = new SetTextCallback(send);
Invoke(stcb);
}
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(test));
th.Start();
}
} 展开
2个回答
展开全部
public Form1()
{
CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
}
这个地方加上这样一句!就OK了
{
CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
}
这个地方加上这样一句!就OK了
追问
谢了。。我刚解决了。。循环要在这个函数里
private void test()
{
SetTextCallback stcb = new SetTextCallback(send);
Invoke(stcb);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
点击按钮为什么不直接让线程运行send()方法?
追问
测试多线程
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询