1

我正在尝试制作一个消息框模式,但我遇到了线程问题。

我有这样的课:

public static class DisplayMessage()
{
    public static void ErrorMessage(string errorMessage)
    {
         MessageBox.Show(errorMessage, "Error", MessageBoxButtons.OK,MessageBoxIcon.Error);
    }
    //other similar methods
}

所以我希望消息框成为主窗体的模态。MessageBox.Show 已重载,因此您可以指定IWin32Window。所以我尝试使用 .ActiveForm 但我得到了这个:

跨线程操作无效:控件从创建它的线程以外的线程访问。

4

2 回答 2

5

试试这个:

    public static void ErrorMessage( Form Parent, string errorMessage )
    {
        if ( Parent != null && Parent.InvokeRequired )
            Parent.Invoke( (Action)(() => MessageBox.Show( errorMessage, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error )) );
        else
            MessageBox.Show( errorMessage, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
    }
于 2012-09-26T13:17:51.647 回答
2

另一种方法是这样的:

当您启动对象实例时,保存当前的 Dispatcher

Dispatcher m_dispatcher = Dispatcher.CurrentDispatcher;

然后,当您必须调用某些东西时,请使用委托

m_dispatcher.Invoke((Action)delegate()
{
   MessageBox.Show(Application.Current.MainWindow, exception.Message, "Fatal Error", MessageBoxButton.OK, MessageBoxImage.Error);
});
于 2013-08-30T08:56:00.270 回答