在我的控制台应用程序中,我有一个包含执行长时间持续工作的类,我需要向用户显示进度。 从应用程序结构的角度来看,我是否需要将此类的对象放入与控制台交互的委托或从类右侧到屏幕写入?
答案 0 :(得分:2)
不要在该课程内写入屏幕。我会按照你的第一个建议来使用事件 - 而不仅仅是代表。
您可以拥有一个名为OnProgressUpdate
的事件,该事件会向主线程通知您当前的进度状态。
答案 1 :(得分:1)
我更喜欢创建一个接口IProgressToken
,它允许设置当前进度,并将其提供给计算方法。
然后,您可以创建该接口的实现,将进度直接写入控制台,或者每隔一段时间,或更新表单上的进度条,发送短信,而无需更改执行计算的类
interface IProgressToken
{
void SetProgress(float percentage);
}
class MyProgressToken : IProgressToken
{
void SetProgress(float percentage)
{
Console.WriteLine("current progress: " + percentage + "%");
}
}
// The long running method
ResultType MyCalculationMethod(InputType input, IProgressToken progressToken)
{
progressToken.SetProgress(0);
...
progressToken.SetProgress(100);
}