【发布时间】:2011-08-01 17:35:44
【问题描述】:
线程都共享资源。这就是多线程操作的全部问题。
MSDN 说:
您必须小心不要在 DoWork 事件 >handler 中操作任何用户界面对象。相反,通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
BackgroundWorker 事件不会跨 AppDomain 边界封送。不要使用 BackgroundWorker 组件在多个 AppDomain 中执行多线程操作。
然而,当我使用 backgroundworker 时,并不是说我需要小心不要操纵任何 UI 对象,如果我尝试从 DOWork 事件访问 UI 组件,那就不行了。代码可以编译,但是当 DoWork 的代码运行时,我得到一个错误:
跨线程操作无效:控件“utAlerts”从创建它的线程以外的线程访问。
MSDN 没有说明这是如何完成的或为什么。后台工作人员是否装饰有一些防止这种情况的属性?这是如何实现的?
【问题讨论】:
-
@Martinho:对不起,它确实可以编译,但我得到了跨线程无效错误。查看我对问题的更改。我不确定为什么我认为它不会编译。很抱歉造成混乱。
标签: c# .net user-interface backgroundworker