Winforms 在单独的线程中执行代码

标签 winforms multithreading

有点幼稚的问题...

我意识到在 Winforms 应用程序中,长时间运行的代码应该在其自己的线程中执行。如何通过按钮单击事件来实现这一目标?

我想这样做是为了释放 UI 线程,以便我可以同时用半透明模式对话框表单覆盖当前表单。我已经创建了模态对话框表单,其中心有一个整洁的加载 GIF,它本身可以完美地处理按钮单击事件。

我选择此方法的原因是,(1) 我想在执行代码时阻止任何用户与表单的交互,(2) 向用户提供处理正在进行的指示(我不知道如何判断一段特定的代码需要多长时间才能执行,因此选择了不确定的加载指示器(gif)。

此外,关于在单独线程中执行代码的主题...这是否不适用于任何代码,或者仅适用于长时间运行的代码?

我非常感谢任何有关此事的帮助!谢谢!

最佳答案

最简单的方法之一是使用 BackgroundWorker成分。添加一个BackgroundWorker到你的表单,为DoWork添加一个事件处理程序。事件,并从那里调用长时间运行的函数。您可以通过调用 RunWorkerAsync 在按钮单击事件处理程序中启动它BackgroundWorker 组件上的方法。

为了知道操作何时准备就绪,请为RunWorkerCompleted设置一个处理程序。事件。

private void Button_Click(object sender, EventArgs e)
{
    myBackgroundWorker.RunWorkerAsync();
}

private void myBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    // long-running operation here; will execute on separate thread
}

private void myBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // operation is ready
}

关于Winforms 在单独的线程中执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1152142/

相关文章:

c# - 发送更大尺寸的附件 asp.net

c# - 如何在 C# 中将 excel 文件导入 DataGridView

c# - 同时选择不同 TreeView 中的2个节点

java - 同步VS strip 锁

java - Future cancel(boolean b) 方法在 GUI 应用程序中使用时不起作用

java - java是否提供了一个干净的机制来确保线程关闭逻辑在线程死亡时运行?

c# - Winforms 自定义对话框挂起父执行

java - 同步线程执行顺序的变化

java - 如何知道 ScheduledExecutorService 何时完成

C#倒数计时器