看两个例子,一个是在一个进程里设置另外一个进程中控件的属性.另外一个是在一个进程里获取另外一个进程中控件的属性. 第一个例子 最近,在做一个使用线程控制下载文件的小程序(使用进度条控件显示下载进度)时,遇到这样的问题, 错误显示: 未处理的“System.InvalidOperationException”类型的异常出现在 System.Windows.Forms.dll 中. 其他信息: 线程间操作无效: 从不是创建控件“progressBar1”的线程访问它. 以前很少做关于线程的程序,而且…
利用FileSystemWatcher设计一个文件监控系统时,如果一个文件被修改或者新建,则文件修改事件会被多次触发而产生多条信息.为了将一个文件被修改一次而产生的多条信息归结为一条,在设计中新开了一个线程,在指定时间内(如2秒内)这个文件的修改被认为是一次修改,从而只产生一条信息. 这个工作完成后,又出现了另外一个问题:因为需要在文件修改时,在Listbox控件中新增一条提示信息,代码是这样的: this.lstResults.Items.Add(info); 结果在运行时出现了:线程间操作无…
“System.InvalidOperationException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 线程间操作无效: 从不是创建控件“label1”的线程访问它. 解决方法: 1 构造方法中添加 CheckForIllegalCrossThreadCalls = false; 2 方法二 invoke label1.Invoke(new Action<string>((str) => { label1.Text = str;…
解决方案就是使用代理,在代理中调用主线程的方法来控制控件 /// <summary> /// 声明代理 /// </summary> delegate void SetTextCallBack(string text); /// <summary> /// 代理函数,在线程中使用 /// </summary> private void Tip(string text) { //判断主线程的控件是否需要使用代理来访问 if (this.tbTip.Invoke…
如何:对 Windows 窗体控件进行线程安全调用 线程间操作无效: 从不是创建控件的线程访问它的三种方法 如果使用多线程处理来提高 Windows 窗体应用程序的性能,则你必须确保以线程安全的方式调用控件. 访问 Windows 窗体控件不是本身就线程安全的. 如果有两个或两个以上线程操作控件的状态,则可能迫使该控件处于不一致状态. 可能出现其他与线程相关的 bug,例如争用条件和死锁. 请务必确保以线程安全的方式访问控件. 详细资料: https://msdn.microsoft.com/z…
如何:对 Windows 窗体控件进行线程安全调用 线程间操作无效: 从不是创建控件的线程访问它的三种方法 如果使用多线程处理来提高 Windows 窗体应用程序的性能,则你必须确保以线程安全的方式调用控件. 访问 Windows 窗体控件不是本身就线程安全的. 如果有两个或两个以上线程操作控件的状态,则可能迫使该控件处于不一致状态. 可能出现其他与线程相关的 bug,例如争用条件和死锁. 请务必确保以线程安全的方式访问控件. 详细资料: https://msdn.microsoft.com/z…
线程间操作无效: 从不是创建控件“textBox1”的线程访问它 背景:通过一个辅助线程计算出的一个值赋给textBox1.text;解决办法:1.直接在窗体的构造函数中加:System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; 此时把所有的控件 合法性线程检查全部都给禁止掉了. 2.通过代理来解决(msdn) private delegate void SetTextCallback(string text);…
今天遇到这个问题,百度了下,把解决的方法总结出来.我们在ui线程创建的子线程操作ui控件时,系统提示错误详细信息为:线程间操作无效: 从不是创建控件“XXX”的线程访问它. 就我知道的有三种方法,先看一下msdn的介绍: 访问 Windows 窗体控件本质上不是线程安全的.如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态. 还可能出现其他与线程相关的 bug,包括争用情况和死锁.确保以线程安全方式访问控件非常重要. 看下解决办法吧 1.把CheckForIllega…
最简单的方法(不推荐): 在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false; 为什么不推荐上面的方法: 为避免空间造成死锁, .net framework 2.0 之后 拒绝多线程访问空间, 以前Control.CheckForIllegalCrossThreadCalls 默认就是flase, 2.0后默认为true.当然如果能保证程序中不会好几个线程同时操作一个控件用上面的方法也可以, 如果存在多个线程一起操作控件使用下面的方法;…
关于多线程执行显示进度条的实例! 之前回答了一篇关于怎么在线程中操作进度条的帖子,估计有人看的不是很明白今天没事,写了一个小小的实例,很简单,就2个文件权当抛砖引玉,希望有更好解决方案的人发表一下意见 界面上2个控件,一个按钮和一个进度条using System;using System.Threading;using System.Windows.Forms; namespace WindowsFormsApplication2{    public partial class Form1 :…