相关疑难解决方法(0)

在C#中做一些工作时显示进度条?

我想在做一些工作时显示进度条,但这会挂起UI并且进度条不会更新.

我有一个一个WinForm ProgressForm ProgressBar将无限期地继续以滚动字幕的方式.

using(ProgressForm p = new ProgressForm(this))
{
//Do Some Work
}
Run Code Online (Sandbox Code Playgroud)

现在有很多方法可以解决这个问题,比如使用BeginInvoke,等待任务完成和调用EndInvoke.或使用BackgroundWorkerThreads.

我在使用EndInvoke时遇到了一些问题,尽管这不是问题.问题是哪种方法是用于处理此类情况的最佳和最简单的方法,您必须向用户显示程序正在运行而不是无响应,以及如何使用最简单的代码来处理这种情况,这样可以提高效率并赢得" t泄漏,可以更新GUI.

就像BackgroundWorker需要有多个函数,声明成员变量等一样.然后你需要保持对ProgressBar表单的引用并处理它.

编辑:BackgroundWorker不是答案,因为它可能是我没有得到进度通知,这意味着没有调用,ProgressChanged因为DoWork是对外部函数的单个调用,但我需要继续调用Application.DoEvents();进度条保持旋转.

赏金是针对此问题的最佳代码解决方案.我只需要调用Application.DoEvents()以便Marque进度条可以工作,而worker函数在Main线程中工作,并且它不会返回任何进度通知.我从不需要.NET魔术代码来自动报告进度,我只需要一个比以下更好的解决方案:

Action<String, String> exec = DoSomethingLongAndNotReturnAnyNotification;
IAsyncResult result = exec.BeginInvoke(path, parameters, null, null);
while (!result.IsCompleted)
{
  Application.DoEvents();
}
exec.EndInvoke(result);
Run Code Online (Sandbox Code Playgroud)

保持进度条活着(意味着不冻结但刷新品牌)

c# multithreading begininvoke .net-3.5

26
推荐指数
4
解决办法
12万
查看次数

标签 统计

.net-3.5 ×1

begininvoke ×1

c# ×1

multithreading ×1