C#多线程问题整合
2015-08-05 10:18
295 查看
一、跨进程访问组件
错误:线程间操作无效: 从不是创建控件“XXX”的线程访问它
解决方法:
1:把CheckForIllegalCrossThreadCalls设置为false
这个方法只是不去捕获对错误线程的调用,并没有从根源上解决问题,通常代码还会继续抛出组件未被实例化的错误。
2:委托(推荐)
直接上代码
声明一个委托方法MyInvoke
IsHandleCreated:获取一个值,该值指示控件是否有与它关联的句柄。如果组件没有被关联,则可以直接执行方法,创建或操作组件。有被关系则委托执行方法。
备注:在C#窗体应用程序中,子窗体执行委托方法仍然会报错,实际应该以父级的身份执行委托,代码:父级窗体.Instance.Invoke();
错误:线程间操作无效: 从不是创建控件“XXX”的线程访问它
解决方法:
1:把CheckForIllegalCrossThreadCalls设置为false
这个方法只是不去捕获对错误线程的调用,并没有从根源上解决问题,通常代码还会继续抛出组件未被实例化的错误。
2:委托(推荐)
直接上代码
public delegate void MyInvoke(); private void SetBtnStatus() { if (IsHandleCreated) { MyInvoke mi = new MyInvoke(SetStatusMethod); BeginInvoke(mi); } else SetStatusMethod(); } public void SetStatusMethod() { btnSave.Enable = true; }
声明一个委托方法MyInvoke
IsHandleCreated:获取一个值,该值指示控件是否有与它关联的句柄。如果组件没有被关联,则可以直接执行方法,创建或操作组件。有被关系则委托执行方法。
备注:在C#窗体应用程序中,子窗体执行委托方法仍然会报错,实际应该以父级的身份执行委托,代码:父级窗体.Instance.Invoke();
相关文章推荐
- C#(WPF)中使用WinAPI函数进行截屏
- C#(WPF)中使用WinAPI函数进行截屏
- C# 重写WndProc 拦截 发送 系统消息
- 【转】C# 的Brush 及相关颜色的操作
- C#读取及写入配置文件教程
- C#多线程介绍(下)
- 编写高质量代码改善C#程序的157个建议
- Leap Motion的环境配置(使用c#)
- C#中[],List,Array,ArrayList的区别于应用
- C# 遍历文件夹及其子文件夹来查找某个文件
- C#编程:读二进制文件的优化
- c#多线程介绍(上)
- c# -- 对象销毁和垃圾回收
- c# 可反复打开word2003,word2007文档方法,可直接使用
- VS2015 C#6.0 中的没有实现/支持的特性
- C# string Spilt
- VS2015 C#6.0 中的那些新特性
- C#正则表达式
- C#将图片和字节流互相转换并显示到页面上
- 控制随机抽中几率 [ C# | Random ]