2 tjwait tjwait 于 2014.02.20 15:51 提问

c# 多线程的一个问题请各位多多指点

小弟刚刚学习c#多线程的知识,今天测试一个简单的windows窗口程序,程序主要内容为:

private void add_item()
{
for (int i = 0; i < 100000; i++)
{
this.listBox1.Items.Add(i.ToString() + " aa ");
}
}
private void button1_Click(object sender, EventArgs e)
{

        ThreadStart ts = new ThreadStart(add_item);
        Thread thread = new Thread(ts);
        thread.Start();

    }

在调试的时候发现如果我点击“启动调试”则程序会报跨线程调用控件的错误。如果我点击“开始执行不调试”则程序运行没问题,不知道是何原因。
另外,如果我用委托来解决跨线程的调用的问题,在程序运行时会发现只有等add_item函数中的循环都执行完了,窗口才显示数据,点击窗口其它的按钮才有反应,感觉同单线程并无区别。如果我不用委托,利用“开始执行不调试”按钮来运行,则程序运行时,能感觉是多线程,在循环执行时我能看到数据是一项一项加上去的,并且在循环执行完毕前我点击窗口上的其它按钮是有反应的,请各位给小弟解解惑,出现以上情况的原因是什么,多谢!

2个回答

u012649241
u012649241   2014.02.26 09:37
    public Form1()
    {
        InitializeComponent();
        Form.CheckForIllegalCrossThreadCalls = false;
    }

在构造函数里加个如上所示的一句话试试

husar516
husar516   2014.05.12 10:16

实时的更新界面数据需要的是一个异步线程。不是这样写的。。。另外产生异常的原因是因为其他线程调用了UI线程造成的。。。。也就是说不可以这样子用的。。百度下 异步线程

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!