社区
组件/控件开发
帖子详情
多线程访问控件
chanQ
2009-05-12 11:46:45
线程A在销毁窗体控件的过程中另一个线程又在访问该控件
导致异常:无法访问已经释放的对象
有什么好办法可以解决的吗?
...全文
104
3
打赏
收藏
多线程访问控件
线程A在销毁窗体控件的过程中另一个线程又在访问该控件 导致异常:无法访问已经释放的对象 有什么好办法可以解决的吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
CGabriel
2009-05-16
打赏
举报
回复
我想你应该先看一下 MSDN 上对于 Control 的一段说明:
注意:
控件上的大多数方法只能从创建控件的线程调用。如果已经创建控件的句柄,则除了 InvokeRequired 属性以外,控件上还有四个可以从任何线程上安全调用的方法,它们是:Invoke、BeginInvoke、EndInvoke 和 CreateGraphics。在后台线程上创建控件的句柄之前调用 CreateGraphics 可能会导致非法的跨线程调用。对于所有其他方法调用,则应使用调用 (invoke) 方法之一封送对控件的线程的调用。调用方法始终在控件的线程上调用自己的回调。
如果你真的想在另外一条线程上操作控件, 应该使用 Control.Invoke 封装并且发送至主线程执行, 那样是一个安全的调用。 不存在控件被线程A销毁,却为完成销毁动作的时候,被线程B调用产生的异常。
因为用 Control.Invoke 封装之后,是在同一条线程上执行,只需要在每次使用前判定是否为 null 即可
chanQ
2009-05-13
打赏
举报
回复
主线程以外的线程在主线程开始销毁Control时有没有办法可以判断Control正在销毁
貌似用IsDisposed属性无法知晓是否销毁
CGabriel
2009-05-13
打赏
举报
回复
正如异常信息已经说得很明白了, 让你在释放之前检查一下是否已经释放。
PS: 在主线程以外访问 Control 本来就是主动要异常...
委托 线程
访问
WINFORM
控件
用
多线程
委托
访问
窗体
控件
,代码简单易懂,安全
c#在
多线程
中
访问
Form中
控件
的多种解决方案
c#在
多线程
中
访问
Form中
控件
的多种解决方案,是我看到的最好最全的方案,贡献给大家看看,希望有所启发
JAVA
多线程
精讲下
本课程是《零基础学Java》系列课程中的"
多线程
"相关课程.授课形式延续了之前课程的授课风格。内容细腻、详尽,由浅入深!通过本门课程的学习你可以深刻理解Java
多线程
的原理及实现运行机制,深刻学习
多线程
的生命...
“线程间操作无效: 从不是创建
控件
“…”的线程
访问
它”的解决办法
文档中讲解了C#中在使用
多线程
,跨线程操作时报错“线程间操作无效: 从不是创建
控件
“…”的线程
访问
它”的解决办法。
跨线程
访问
Windows窗体
控件
跨线程
访问
Windows窗体
控件
,线程带多参数。 跨线程
访问
Windows窗体
控件
,线程带多参数。
组件/控件开发
8,834
社区成员
7,151
社区内容
发帖
与我相关
我的任务
组件/控件开发
.NET技术 组件/控件开发
复制链接
扫一扫
分享
社区描述
.NET技术 组件/控件开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章