跨线程 调试-c# 多线程的一个问题请各位多多指点

问题描述

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函数中的循环都执行完了,窗口才显示数据,点击窗口其它的按钮才有反应,感觉同单线程并无区别。如果我不用委托,利用“开始执行不调试”按钮来运行,则程序运行时,能感觉是多线程,在循环执行时我能看到数据是一项一项加上去的,并且在循环执行完毕前我点击窗口上的其它按钮是有反应的,请各位给小弟解解惑,出现以上情况的原因是什么,多谢!

解决方案

    public Form1()
    {
        InitializeComponent();
        Form.CheckForIllegalCrossThreadCalls = false;
    }

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

解决方案二:

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

时间: 2024-12-03 21:02:00

跨线程 调试-c# 多线程的一个问题请各位多多指点的相关文章

线程-VC6 写windows服务问题,请高手帮忙指点一下

问题描述 VC6 写windows服务问题,请高手帮忙指点一下 UINT _MainThread(LPVOID lparam)//主线程 { cout<<"_MainThread Start!"< CString dspmsg; UINT timeID1 = 0; if (!m_pFSockServer->Create(gListenPort) ) { exitService(GetError(GetLastError())); return -1; } if

.net中调试时出的一个错误,求达人指点!

问题描述 错误25e:xywebC_ControlsHeader_Company_User.ascx(17):errorCS1061:"ASP.c_controls_header_company_user_ascx"不包含"WebList_Changed"的定义,并且找不到可接受类型为"ASP.c_controls_header_company_user_ascx"的第一个参数的扩展方法"WebList_Changed"(是否

请各位高手帮忙解决一个求和函数问题,在线等,十分着急!请各位前辈指点!

问题描述 [align=left]有表格如下图,切表格中的数据均都为数字,除第一列为汉字之外,如何写个函数可以使每行每列的数据相加,如下图最后一行为上数字之和,如何能写个活函数,就是可以计算第一行到第三行的数据的和也可以计算第三行到第五行的和,也可以计算第二行到第五行的数据的和!-------------------------------------------|200|100|200|300|400|200|100|第一行-----------------------------------

C#多线程、跨线程与线程安全的示例详解

C#多线程.跨线程与线程安全的示例详解(三种不同方法)  代码如下 复制代码 using System.Threading; public static class Extensions     {         //控件扩展方法(用于跨线程操作),因为为了线程的安全,防止资源竞争出现死锁或不一致的状态,.NET是不允许进行跨线程访问窗体控件的.         public static void SafeCall(this Control ctrl, Action callback)   

一个跨线程创建窗口的死锁案例

出于某种需要,我们有时可能会实现一个如下描述的场景: 在线程 A 中,创建一个窗口,称为窗口 X. 窗口 X 创建后,创建一个子窗口,称为窗口 Y,并且 Y 所属一个新线程,称为线程 B. 简单来说,父子窗口分别所属不同的线程. 需求描述完毕,现在进入实现的阶段.我以一个简单的例子来实现这个场景,其中 X 为一个自定义窗口,Y 为一个按钮.为了使 按钮从属线程 B,那么我们需要在线程 B 中创建它,并实现其消息队列的分发.另外,父窗口在某个时机(比如 WM_CREATE)创建线程 B.最后,父窗

MFC跨线程调用另一个线程函数执行的函数

问题描述 MFC跨线程调用另一个线程函数执行的函数 MFC跨线程调用另一个线程函数执行的函数,怎么得到函数的返回值呢?函数名转换函数值 解决方案 http://blog.csdn.net/hebezai/article/details/3529736 解决方案二: 跨线程调用MFC成员函数

多线程-JAVA中如何在一个线程里面停掉另一个线程

问题描述 JAVA中如何在一个线程里面停掉另一个线程 JAVA中如何在一个线程里面停掉另一个线程,是在一个线程里面哦 PS:新人第一次问问题,希望大神求教 解决方案 定义一个共享变量在run方法里面 while(start){ } 解决方案二: 所以说,这个问题的答案是:不可以! 虽然的确有那么个方法可以摧毁别人的线程,但很早很早就已经过期了,如果没记错的话我之前也这么玩,而结果是这个过期的方法根本没有作用-- 虽然说办法不是没有,那就是通过改变变量值,它知道自己该死了,就退出循环,走向结束.

c#Sytem.Threading.Timer线程TimerCallBack委托中方法涉及访问ui成员用考虑跨线程安全问题吗

问题描述 publicpartialclassScreen1{privateSystem.Threading.Timert1;voidScreen1_Opened(System.Objectsender,System.EventArgse){t1=newSystem.Threading.Timer(newTimerCallback(countTimer),null,0,1000);//定时器线程}voidcountTimer(objectob){this.Text1.Text="hello&qu

windows跨线程调用控件的方法

用户不喜欢反应慢的程序.在执行耗时较长的操作时,使用多线程是明智之举,它可以提高程序 UI 的响应速度,使得一切运行显得更为快速.在Windows 中进行多线程编程曾经是 C++ 开发人员的专属特权,但是现在,可以使用所有兼容 Microsoft .NET 的语言来编写. 不过Windows 窗体体系结构对线程使用制定了严格的规则.如果只是编写单线程应用程序,则没必要知道这些规则,这是因为单线程的代码不可能违反这些规则.然而,一旦采用多线程,就需要理解 Windows 窗体中最重要的一条线程规则