gpt4 book ai didi

c# - 使用模态显示将 BackgroundWorker 转换为 Task.Run

转载 作者:行者123 更新时间:2023-11-30 23:25:30 25 4
gpt4 key购买 nike

我一直在学习 TPL 库中的功能。我遇到了 article来自 Stephen Cleary,它比较了 BackgroundWorker 和 Task.Run。我对 TPL 相当满意,并决定在我的 WinForm 应用程序中将一些 BackgroundWorker 代码转换为 Task.Run,​​但我无法为特定情况计算出 Task.Run 的等价物。本质上,当长时间运行的操作在 BackgroundWorker 中运行时,我会显示模式窗体,目的是禁止用户执行任何操作,同时确保应用程序不会挂起。完成后,模态窗体以编程方式关闭。我使用 BgWorker 快速创建了一个示例。这是主要形式:

public partial class Form1 : Form
{
FrmMessageBox frm_ = new FrmMessageBox();
BackgroundWorker worker_ = new BackgroundWorker();

public Form1()
{
InitializeComponent();
worker_.DoWork += (_, __) =>
{
Thread.Sleep(10000);
};

worker_.RunWorkerCompleted += (_, __) =>
{
frm_.Close();
};
}

private void button1_Click(object sender, EventArgs e)
{
worker_.RunWorkerAsync();
ShowMessageBox();
}

private void ShowMessageBox()
{
frm_.Show("We're delaying 10 secs!", "Delay");
}

private void CloseMessageBox()
{
frm_.Close();
}
}

这是 FrmMessageBox 类:

public partial class FrmMessageBox : Form
{
public FrmMessageBox()
{
InitializeComponent();

}

public DialogResult Show(string message, string title)
{
Text = title;
label1.Text = message;
return ShowDialog();
}
}

当我单击主窗体上的按钮时,BgWorker 启动并显示模态窗体。 BgWorker 完成后,表单将在完成事件中关闭。有没有办法通过 Task.Run 获得同样的行为?

最佳答案

试试这段代码

private void button1_Click(object sender, EventArgs e)
{
Task.Run(() =>
{
Thread.Sleep(2000);
Invoke(new Action((CloseMessageBox));
});

ShowMessageBox();
}

关于c# - 使用模态显示将 BackgroundWorker 转换为 Task.Run,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37197014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com