使用异步任务处理多个对话框窗口

时间:2017-10-03 11:44:11

标签: c# .net async-await task-parallel-library

从我的主WinForm应用程序窗口,我想同时打开多个无模式对话框。当打开所有对话框窗口时,我将引发一些事件,并且各个打开的对话框上的事件处理程序应该对这些事件采取必要的操作。由于用户想要一直访问主窗体,我无法打开这些窗口作为模态对话框。

我写了以下代码。

使用此代码,对话框窗口将打开,但它们也会立即关闭。代码有什么问题?为什么窗户不能打开?

private async void buttonOpenWindows_Click(object sender, EventArgs e)
{

        Task[] tasks = new Task[]
        {
            Task.Factory.StartNew(CreateWindow),
            Task.Factory.StartNew(CreateWindow),
            Task.Factory.StartNew(CreateWindow),
            Task.Factory.StartNew(CreateWindow)
        };

        await Task.WhenAll(tasks);

        // Raise necessary events when all windows are loaded.              
}

private async Task CreateWindow()
{
    // A refernce to main form is passed to the Window because all Windows will be subsribing to some events raised by the main form.
    var window = new Window1(this);
    window.Show();
}

1 个答案:

答案 0 :(得分:4)

发生了什么:

private async Task CreateWindow()
{
    // A refernce to main form is passed to the Window because all Windows will be subsribing to some events raised by the main form.
    var window = new Window1(this);
    window.Show();
}

这将创建一个新窗口,由系统中的第一个可用线程拥有。由于没有更多阻止代码可以运行,Task成功完成,因此Window已关闭/处置。

如果您希望继续打开Window,则需要在主线程中打开它。

但不确定以Windows的方式打开async可能会让您受益匪浅。