【发布时间】:2014-01-24 07:30:17
【问题描述】:
模式对话框会阻塞代码,直到它返回。我想要没有新窗口的同样的东西。
一个带有单独对话框的简单示例(不是我要找的)
MessageBox.Show("Continue");
MessageBox.Show("This waits until the first returns.");
我正在寻找的一个简单的不工作示例:
mres1.Wait();//Where: ManualResetEventSlim mres1 = new ManualResetEventSlim(false);
MessageBox.Show("This should wait until button2 is clicked.");
+
private void button2_Click(object sender, EventArgs e)
{
mres1.Set();
}
是的,我知道这会失败,因为它阻塞了整个线程。但这就是我正在寻找的那种系统,只有不阻塞线程,只有代码。这可能吗?
(我不是在寻找解决方法(-“在事件的事件处理程序中调用其余代码。”)。我在问是否可以按照描述的方式完成。)
编辑:目标是用Panel(Dock = DockStyle.Fill)替换我目前拥有的模式对话框。
【问题讨论】:
-
您使用的是 Visual Studio 2012 还是更新版本?
-
@ScottChamberlain VS2010.
-
在主线程上恢复执行的催化剂是什么?
-
@ispiro 如果您使用 Visual Studio 2012,您可以通过 Microsoft.Bcl.Async 在 .NET 4.0 中使用 async/await,这将是完美的选择。但你不是,所以我将此作为评论而不是答案。
-
@ispiro 不,
await只是在等待Task完成而不阻塞 UI 线程。Tasks是显示某种“异步工作”的包装器。这项工作可以是running a thread,等待for a event,或者作为旧APM model 的包装器(使用BeginXxxx(和EndXxxx()。任务(和等待)并不意味着线程。
标签: c# .net winforms visual-studio-2010 .net-4.0