【发布时间】:2011-07-13 12:29:05
【问题描述】:
我有一个主 UI 线程,它运行应用程序并创建主窗口窗体(我们称之为W)。我还有一个辅助线程,我启动它并创建一个对话框(我们称之为B)。
我想将对话框B 的所有者设置为主窗口W。 Bs 所有者的设置发生在创建B 的线程上。基本上:
b.Owner = w;
但这会引发跨线程异常,告诉我我正在尝试从错误的线程访问 W 对象。
所以我尝试在主 UI 线程上执行代码,方法是在 W 上使用 Control.Invoke。但是,我得到了同样的错误,告诉我我正在尝试从错误的线程访问B:
System.InvalidOperationException was unhandled by user code
Message=Cross-thread operation not valid: Control 'B' accessed from a
thread other than the thread it was created on.
Source=System.Windows.Forms
我该怎么做才对?
【问题讨论】:
-
不要在多个线程上使用表单。它会给你带来更多的麻烦。
-
您是否阅读了这篇 SO 帖子:stackoverflow.com/questions/3046245/…?如果这对您没有帮助,您应该发布给出错误的代码。
-
也许您可以告诉我们您希望利用哪些所有权功能(希望不是全部),我们可以建议实现类似效果的方法?
-
感谢所有发帖的人;我知道我是在自找麻烦。我需要在主 UI 线程上运行一些遗留代码,并且我希望在发生这种情况时显示一个进度对话框;而且我不能让主 UI 线程处理进度对话框。所以我去找了一个由另一个线程 100% 管理的进度对话框。