0

我正在使用WPF Toolkit提供的 MessageBox 。我得到了错误

调用线程必须是 STA,因为很多 UI 组件都需要这个

new Thread(new ThreadStart(delegate
{
    MessageBox.Show("Opeartion could not be completed. Please try again.","Error",MessageBoxButton.OK,MessageBoxImage.Error);
})).Start();

在这种情况下如何设置 ApartmentState

编辑:我正在尝试使用 WPF Toolkit 的 MessageBox 控件显示无模式的 MessageBox。到目前为止,我拥有的代码如下:

void SomeFunction()
{
// calls to some UI, and processing and then

var th = new Thread(new ThreadStart(delegate
                                        {
                                           MessageBox.Show("Opeartion could not be completed. Please try again.",
                                                "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                                        }));

                                        th.SetApartmentState(ApartmentState.STA);
                                        th.Start();
                                    }
}
4

2 回答 2

0
// enable unit test to mock a dispatcher
var dispatcher = Dispatcher.CurrentDispatcher;
if (Application.Current != null)
{
    // use the application dispatcher if running from the software
    dispatcher = Application.Current.Dispatcher;
}

if (dispatcher != null)
{
    // delegate the operation to UI thread.
    dispatcher.Invoke(
        delegate
        {
            MessageBox.Show("Opeartion could not be completed. Please try again.","Error",MessageBoxButton.OK,MessageBoxImage.Error);
        });
}
于 2015-11-12T03:43:43.603 回答
-1

已编辑

根据MSDN WPF 中存在内置模式 MessageBox 但如果你想使用无模式 MessageBox 那么你必须创建自定义窗口然后显示它。从自定义的无模式 MessageBox 创建、显示和返回值并不是很困难。 你可以看到这个链接

仅对消息框使用不同的线程是不明智的。无论如何,您可以通过以下方式设置单身公寓状态...

  Thread th = new Thread(new ThreadStart(delegate
  {
    MessageBox.Show("Opeartion could not be completed. Please try again.", "Error",MessageBoxButtons.OK,MessageBoxImage.Error);
  }));

  th.ApartmentState = ApartmentState.STA;
  th.Start();
于 2012-05-24T07:39:40.937 回答