【问题标题】:Windows Forms Application - Slow/Unresponsive UI [duplicate]Windows 窗体应用程序 - 缓慢/无响应的 UI [重复]
【发布时间】:2012-07-11 04:09:10
【问题描述】:

可能重复:
C# WinForm Application - UI Hangs during Long-Running Operation

我使用 C# 和 .NET Framework 4.0 创建了一个 Windows 窗体应用程序。我有一个问题,当程序正在工作时,我无法在窗口中移动,如果我最小化它,我就无法让它回来。我认为这是因为我在运行 UI 的同一线程上工作。

这可能是原因吗?如果是这样,我该如何解决?

【问题讨论】:

  • 这取决于工作是什么。但是您可以尝试使用Background Worker Class
  • @MarkHall 主要是上传文件到服务器
  • 我觉得这个问题每天都会被问到......我们可以开始将它们作为重复项正确关闭吗?

标签: c# .net winforms multithreading user-interface


【解决方案1】:

如果您不想深入了解线程和线程的内部结构,我建议您使用 BackgroundWorker 控件来完成您的任务。 Background worker 控件在后台封装了很多线程的东西,给你一个干净的编程接口。

下面的链接可能对你有帮助(我写的)

Correct way to use the BackgroundWorker

【讨论】:

    【解决方案2】:

    尝试在以下位置编写代码:

                System.Threading.Tasks.Task.Factory.StartNew(new Action(() =>
                {
                    //your code goes here
                }));
    

    因为没有任务,你的代码和 UI 在同一个线程上运行,这会导致速度变慢

    【讨论】:

    • 我应该使用 Tasks 还是 BackgroundWorker 类?
    • @StickFigs 请参阅此 MSDN 论坛 link 基本上如果您需要更新 UI 使用 Background Worker,否则使用 System.Threading 命名空间
    • 我在 WPF 中遇到了同样的问题,并使用任务解决了它。我从来没有使用过 BackroundWorker,所以我不能就此提供任何建议。但是我使用 Dispathcer.Invoke() 更新了 UI 元素。但我不知道这是否正确
    猜你喜欢
    • 2021-03-15
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多