Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:如何让事件处理程序中的消息框冻结应用程序,直到按下Ok?_C#_.net_Showdialog - Fatal编程技术网

C#:如何让事件处理程序中的消息框冻结应用程序,直到按下Ok?

C#:如何让事件处理程序中的消息框冻结应用程序,直到按下Ok?,c#,.net,showdialog,C#,.net,Showdialog,嗨,我主要有这个 NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(AddressChangedCallback); //The main also contains a form 下面是这个方法 static void AddressChangedCallback(object sender, EventArgs e){ // would like to have a message

嗨,我主要有这个

  NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(AddressChangedCallback);
//The main also contains a form
下面是这个方法

static void AddressChangedCallback(object sender, EventArgs e){
// would like to have a message box here that freezes the entire application
including  the form as mentioned above , untill OK is pressed"
}

我假设这是一个WinForms应用程序
NetworkAddressChanged
事件在后台线程上调用。这就是为什么当你从那里显示一个消息框时,你的应用程序会保持活动状态

解决方案1: 您需要将此调用封送到主UI线程。您可以在主窗体上使用方法来实现这一点。在表单类上定义一个方法以显示消息框。在主窗体上使用Invoke方法调用此方法

解决方案2:
我假设这是一个WinForms应用程序
NetworkAddressChanged
事件在后台线程上调用。这就是为什么当你从那里显示一个消息框时,你的应用程序会保持活动状态

解决方案1: 您需要将此调用封送到主UI线程。您可以在主窗体上使用方法来实现这一点。在表单类上定义一个方法以显示消息框。在主窗体上使用Invoke方法调用此方法

解决方案2:
它被称为模态和无模态。Show是非模态的,ShowDialog是模态的。您可以阅读更多信息。

它被称为模态和无模态。Show是非模态的,ShowDialog是模态的。你可以阅读更多。

你用什么?WPF,WinForms?您是否尝试了MessageBox.Show?您使用了什么?WPF,WinForms?您是否尝试过
MessageBox.Show
?MessageBox类生成的消息框始终是相对于其父级的模态。这与以模态模式显示表单不同。@Zespri:ShowDialog允许在显示表单时指定父级。MessageBox类生成一个相对于其父级始终为模态的消息框。这与在模式模式下显示窗体不同。@Zespri:ShowDialog允许在显示窗体时指定父级。嗨,Zespri。。。它是一个普通的控制台应用程序。有没有可能像你建议的那样做@HelloWorld_Always:在你的问题中,你说“main也包含一个表单”。如果这不是WordFras的话,你的意思是什么?@ HeloReld:总是:如果你满意的话,考虑接受这个答案。它是一个普通的控制台应用程序。有没有可能像你建议的那样做@HelloWorld_Always:在你的问题中,你说“main也包含一个表单”。如果这不是WordFras的话,你的意思是什么?@ HeloLogd总是:如果你满意的话,考虑接受这个答案。