模态消息框线程问题

时间:2012-09-26 13:13:24

标签: c# winforms modal-dialog messagebox

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

我有一个这样的课程:

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,但我得到了这个:

  

跨线程操作无效:从其他线程访问控制   而不是它创建的线程。

2 个答案:

答案 0 :(得分: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 );
    }

答案 1 :(得分: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);
});
相关问题