如何强制一段代码在我的主线程上执行?在主线程上强制执行代码
这就是为什么我想知道:
我有时常会从一个线程是不是主线程显示自定义创建的消息框。但是,当消息框构造函数被调用时,我得到一个InvalidOperationException异常,说“调用线程必须是STA,因为许多UI组件需要这个。”这是有道理的,UI元素需要在主线程上处理。
My MessageBox.ShowMessage(...)函数是一个静态函数,它创建自定义消息框的实例并显示它。有什么我可以放在ShowMessage中强制消息框被创建并显示在主线程上?在我的代码中的其他地方,我使用Control.BeginInvoke来处理类似的问题,但由于它是一个静态函数,因此我没有现有的UI元素来调用BeginInvoke。
是否必须使用Control.BeginInvoke调用MessageBox.ShowMessage?我更喜欢在ShowMessage中调用BeginInvoke(或一些等价的)。
您是否有链接解释如何执行您列出的第一个选项? – w4g3n3r 2009-04-24 21:41:02
在启动线程之前调用Thread.SetApartmentState()。 – itowlson 2009-04-24 21:44:08
创建线程时,只需调用。(编辑)答案中显示的.SetApartmentState。首先让我知道是否需要更多帮助来创建线程。 – 2009-04-24 21:44:25