C# 多线程 在线程中访问主线程创建的控件会出错,怎么办?最好是帖点源码出来,用CheckForIllegalCrossThreadCalls的就别帖了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用System.ComponentModel.BackgroundWorker? 这个是跨线程访问参考 // 使用线程安全方法对窗体控件进行操作 // 首先查询控件的InvokeRequired属性,以此来判断是不是正在从创建这个控件的线程访问该控件 // 如果不是正在从创建这个控件的线程访问该控件,该方法将创建 SetTextDelegate 的一个实例, // 并调用窗体的 Invoke 方法,这使得 SetText 方法被创建 TextBox 控件的线程调用,而且在此线程上下文中将直接设置 Text 属性 // // 如果是从创建该控件的线程访问它,则直接对其进行操作 private void SetText(string text) ...{ // InvokeRequired 比较线程ID以及创建控件的线程ID,不同则返回true if (this.textBox1.InvokeRequired) ...{ SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] ...{ text }); } else ...{ this.textBox1.Text = text; } } 必須通過委託來實現delegate void FormShow();FormShow _FormShow;_FormShow=new FormShow(ThisShow); private void ThisShow() { this.Show(); if (_Dat.Save) { SaveDat(Application.StartupPath + "\\MyDat.sd"); } f2.Close(); t.Abort(); }//this.Invoke(_FormShow);線程調用的時候 用委托把进度值传回来,然后在主界面掉this.Invoke();Invoke里面加上更新进度条的函数 线程问题 关于学校排课系统思路 image 类型的创建 Canon SDK messagebox如何让它不显示在状态栏 怎样将Excel表格导入Gridview中同时保存进数据库 水晶报表图标不显示 WinForm中的控件的ENABLED属性问题请教 VS2008编写XNA游戏,载入3D模型编译错误。 如何用C#实现电子邮件中的附件的接收? 在线等!十万火急! 在不同计算机间使用消息队列发送消息必须要安装域服务器吗? C#中的全局变量问题
// 首先查询控件的InvokeRequired属性,以此来判断是不是正在从创建这个控件的线程访问该控件
// 如果不是正在从创建这个控件的线程访问该控件,该方法将创建 SetTextDelegate 的一个实例,
// 并调用窗体的 Invoke 方法,这使得 SetText 方法被创建 TextBox 控件的线程调用,而且在此线程上下文中将直接设置 Text 属性
//
// 如果是从创建该控件的线程访问它,则直接对其进行操作
private void SetText(string text)
...{
// InvokeRequired 比较线程ID以及创建控件的线程ID,不同则返回true
if (this.textBox1.InvokeRequired)
...{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] ...{ text });
}
else
...{
this.textBox1.Text = text;
}
}
FormShow _FormShow;
_FormShow=new FormShow(ThisShow);
private void ThisShow()
{
this.Show();
if (_Dat.Save)
{
SaveDat(Application.StartupPath + "\\MyDat.sd");
}
f2.Close();
t.Abort();
}
//this.Invoke(_FormShow);線程調用的時候
Invoke里面加上更新进度条的函数