我正在尝试显示一个msgbox,并让用户选择是或否。我正在传递一个DataTableMessage,我使用msgbox中的3行值。我收到错误“调用线程必须是STA,因为许多UI组件都需要这个。”
我正在使用vb.net和WFP。发生此错误的代码如下:
If MsgBox("Message Text Here"
, MsgBoxStyle.YesNo, "Caption Here") = MsgBoxResult.No
Then 'Do something
Else
'Do Something
End If
答案 0 :(得分:2)
您必须在与UI线程不同的线程中显示此MessageBox。
使用以下方法执行此操作:
<强> 1 强>
Application.Current.Dispatcher.Invoke(Sub()
' Message Box CODE
End Sub)
使用
Invoke
而非BeginInvoke
,因为这是MessageBox
,可能是VB
决定因素。延迟客栈的可见度可能无法承受。 :)这也是c#代码,因为我是一个c#dev。但这个概念 在
Dispatcher
中相同。
<强> 2 强>
如果您不想使用Thread
,那么您也可以使用(在Thread
创建Thread
,而不是在另一个Task.Factory.StartNew(Sub()
End Sub,
CancellationToken.None,
TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()
)
中使用):
Male
但不要在线程中执行不必要的代码。您的用户界面可能会被屏蔽。