您可以在SO上找到很多类似的问题,但是没有一个问题(如我所见)涵盖了您的逻辑必须返回某些内容的情况。
在此代码示例中,我有一个简单的CustomMessageBox(它是一个窗口),它必须返回用户输入的内容。
public class CustomMessageBox
{
private string Value
{
get
{
return txt_box.Text;
}
}
private CustomMessageBox ()
{
InitializeComponent();
}
public static string Show(string caption = "Enter data")
{
CustomMessageBox cmb = new CustomMessageBox ();
cmb.txt_block.Text = caption;
cmb.ShowDialog();
return cmb.Value;
}
}
因此,当
Show
调用BackgroundWorker
方法时,构造函数尝试执行时会在第一行引发异常。异常消息是An exception of type 'System.InvalidOperationException' occurred in
PresentationCore.dll but was not handled in user code
Additional information: The calling thread must be STA,
because many UI components require this.
没什么新鲜的,但是我找不到解决此问题的方法,也无法使线程成为STA。
Show
方法签名必须像下面这样清楚-接受字符串并返回字符串。这样的事情通常必须如何解决?
最佳答案
public static string Show(string caption = "Enter data")
{
Application.Current.Dispatcher.Invoke(new Action(() =>
{
CustomMessageBox cmb = new CustomMessageBox();
cmb.txt_block.Text = caption;
cmb.ShowDialog();
}));
return cmb.Value;
}
关于c# - InvalidOperationException : The calling thread must be STA,,因为许多UI组件都需要这样做,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32092637/