我正在尝试制作一个消息框模态,但我遇到了线程问题。
我有一个这样的课程:
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,但我得到了这个:
跨线程操作无效:从其他线程访问控制 而不是它创建的线程。
答案 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);
});