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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
LDS系统
请各位多多指点
ThreeLayerLib源代码
ThreeLayerLib.dll的源代码,请各位大神多多指点其中存在的问题,不胜感激,再次感谢各位大神对在下的关注和指点!
c#实现摇奖机
c#实现摇奖机 希望各位多多指点
采用C#语言、SQL Server 2005数据库开发的畅聊QQ
采用C#语言、SQL Server 2005数据库开发的简单QQ,初来乍到,请各位前辈多多指点
ajax基础实战
ajax基层实战代码,请各位大婶多多指点,谢谢
C51单片机写的数字钟程序
单片机写的数字钟,初学者,请各位大侠多多指点啊
.net摇奖机源代码
通过多线程,实现一个很简单的摇奖功能,功能还没完善,请大家多多指点!
java测试题请各位高手多多指点
package work; import java.util.Random; public class Work {  /**   * 随机生成50个数字(整数),每个数字的范围是[10,50],统计   * 每个数字出现的次数以及出现次数最多的数字与它的个数,最   * 后将每个数字及其出现次数打印出来,如果某个数字出现次数   * 为0,则不要打印它。打印时按照数字的升序排列。
小型超市管理源码
这是一个小型超市的收银系统,希望各位老师多多指点
c#文本编辑器源码,一个菜鸟写的
c#文本编辑器源码,一个C#菜鸟写的文本编辑器。请各位大虾指点,批评。