Wpf 调用线程必须是STA,因为许多UI组件都需要它。VB.NET
我试图显示一个msgbox,并让用户选择是或否。我收到一条DataTableMessage,其中我使用msgbox中的3行值。我得到一个错误,调用线程必须是STA,因为许多UI组件都需要它 我正在使用vb.net和WFP。发生此错误的代码如下所示:Wpf 调用线程必须是STA,因为许多UI组件都需要它。VB.NET,wpf,vb.net,multithreading,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
If MsgBox("Message Text Here"
, MsgBoxStyle.YesNo, "Caption Here") = MsgBoxResult.No
Then 'Do something
Else
'Do Something
End If
您必须在与UI线程不同的线程中显示此MessageBox 请使用以下命令执行此操作: 一, 使用Invoke not BeginInvoke,因为这是一个MessageBox,可能是 决定因素。delay inn的能见度可能无法承受: 这也是c代码,因为我是c开发人员 在VB中也是如此 二,。 如果不想使用Dispatcher,则还可以在UI线程中使用Create Thread,而不是在其他线程中使用: 但是不要在线程中执行不必要的代码。您的UI可能会被阻止
不适用于VB.NET@StepUp@StepUp没有关系。OP正在使用VB的MsgBox函数,该函数是WinForms消息框的包装器。@shaunmorehammeredenovan您使用了错误的方法。在WPF中,使用WPF。另外,您是否显示来自主线程或其他线程的消息框(例如在回调中),或响应thread.Timer事件?MsgBox工作正常,这就是他可以看到错误消息的原因。不要从工作线程更新UI。或者使用错误的消息框类-OP使用的是Windows窗体方法。UI线程冲突的错误消息不同No,AFAIK导致此错误的是MessageBox.show。如果我从另一个线程执行Window.Height=200,那么我将得到一些资源所有者类型异常@当VB.NET是唯一的语言标记时,请在VB.NET中发布答案。相反,这是不被接受的,所以同样的规则在这里也适用。Lambda语法在这两种语言之间有很大的不同,这会让不熟悉这种语言的人感到困惑。我不是VB开发人员。所有这些在C语言中也适用。我只是在等待OP给出更多细节,然后再回答或关闭重复的答案。有很多重复的问题,而且有多个答案只会让下一个寻找答案的人更加困难answer@MattWilko好啊完成。
Application.Current.Dispatcher.Invoke(Sub()
' Message Box CODE
End Sub)
Task.Factory.StartNew(Sub()
End Sub,
CancellationToken.None,
TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()
)