Set*_*eth 17 c# forms continue
Form.ShowDialog()方法导致代码暂停,直到新调用的窗体关闭.我需要在调用ShowDialog()方法后继续运行代码.我用谷歌搜索并阅读有关使用backgroundworker的内容?但这是我第一次听说过,从未使用过它.
Form2 form2this = new Form2();
form2this.ShowDialog();
MessageBox.Show("Something");
Run Code Online (Sandbox Code Playgroud)
单击按钮后执行此代码,如何仍然调用ShowDialog以防止用户与主窗体交互,但仍然允许主窗体继续其工作?
很抱歉,如果已经讨论过,但我发现的一切似乎都很难执行这么简单的任务.我实际上很惊讶它不包含在SHowDialog方法中.例如ShowDialog().继续会很酷.
Ser*_*rvy 17
如果您只是希望代码继续而不是阻塞,直到弹出窗口关闭,请考虑使用Show
而不是ShowDialog
.
如果您希望在子表单启动时让父表单执行某些操作,那么是的,使用BackgroundWorker(或者只是手动启动新的线程/任务)可能是合适的.了解更多关于该任务的内容将会有所帮助.如果你需要与主表格或儿童表格互动,那对我来说似乎很麻烦; 如果你只是需要做一些没有UI交互的后台任务,那么这是正确的思路.
另一种可能性是,您想要做的事情应该是在子表单中完成的,而不是父表单.
只要在打开模式对话框期间执行异步操作,就可以像下面所示一样简单地进行,假设button1_Click()是按钮的事件处理程序.
private async void button1_Click(object sender, EventArgs e)
{
// create and display modal form
Form2 modalForm = new Form2();
BeginInvoke((Action)(() => modalForm.ShowDialog()));
// do your async background operation
await DoSomethingAsync();
// close the modal form
modalForm.Close();
}
private async Task DoSomethingAsync()
{
// example of some async operation....could be anything
await Task.Delay(10000);
}
Run Code Online (Sandbox Code Playgroud)
我发现当我使用建议使用Show()的解决方案时,我可能会在我想要模态的对话框最终在主窗体后面,在应用程序之间来回切换的情况下结束.当我使用上述解决方案时,这种情况从未发生