调用线程必须是STA,因为许多UI组件都需要这个。 VB.NET

时间:2016-02-15 09:38:41

标签: wpf vb.net multithreading

我正在尝试显示一个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

1 个答案:

答案 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
  

但不要在线程中执行不必要的代码。您的用户界面可能会被屏蔽。