0

在我的控制台应用程序中,我有一个封装了执行长期工作的类,我需要向用户显示进度。从应用程序结构的角度来看,我是否需要在此类的对象中放入一个委托以与控制台交互或从类权限写入屏幕是否可以?

4

2 回答 2

2

不要在该班级内写到屏幕上。我会接受您的第一个建议,为此使用事件 - 而不仅仅是代表。

你可以有一个名为的事件OnProgressUpdate,它通知主线程你当前的进度状态。

于 2013-09-19T12:40:45.823 回答
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);
}
于 2013-09-19T12:39:14.730 回答