【发布时间】:2013-03-10 21:15:38
【问题描述】:
我必须通过大量迭代、矩阵运算等来实现非常复杂的算法。傅里叶级数逼近有两个主要循环。我想知道实现进度回调的最佳方法是什么。我将来想在 WPF 应用程序中使用这个算法,我想实现进度条。如何准备算法以使将来的进度条实现变得容易?
我正在考虑这样的事情:
static void Main(string[] args)
{
Console.Write("Progres... ");
Alg((i) => UpdateProgress(i));
}
public static void UpdateProgress(int iteration)
{
string anim = @"|/-\-";
Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
Console.Write(anim[iteration%5]);
}
public static void Alg(Action<int> progressCallback)
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(50);
progressCallback(i);
}
}
【问题讨论】:
-
进度:操作已完成/待操作
-
这很清楚。但我要求的是别的东西。使用什么委托、Func 或什么作为算法的参数。这里最好的选择是什么?
-
您应该能够实现在单独线程上运行的算法并使用
BackgroundWorker及其ProgressChanged事件更新UI。查看此链接了解更多信息:elegantcode.com/2009/07/03/…。 -
如果这解决了您的问题,或者您需要代码方面的帮助,请告诉我,以便我将其作为答案发布并在需要时添加更多信息。
-
我喜欢你的评论,因为你指出了一件重要的事情——不要冻结 UI。我认为我会坚持我的 collback 作为 Action 的想法,我认为它是松散耦合的。对于线程,我使用 TPL,因为它比 BackgroundWorker 为我做的更多。