Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在从工人类返回状态_C# - Fatal编程技术网

C# 正在从工人类返回状态

C# 正在从工人类返回状态,c#,C#,我有一个服务班和一个工人班。worker类完成所有处理 class WorkerClass { public void ProcessWork(<params to the method>) { // Get the tasks from the DB. // Call a 3rd party web service to process each of the tasks. } } 从worker类中公开属性并在servi

我有一个服务班和一个工人班。worker类完成所有处理

class WorkerClass
{
    public void ProcessWork(<params to the method>)
    {
        // Get the tasks from the DB.
        // Call a 3rd party web service to process each of the tasks.
    }
}
  • 从worker类中公开属性并在service类中获取属性。每30秒刷新一次属性


  • 获取状态的干净方法是什么?

    前两个选项在功能上完全相同。这两种方法都可以很好地满足您的需要。第二个暗示委托是必需的,而第一个暗示委托不是必需的。一个事件也可能意味着它的使用超出了这一方法的范围

    至于第三个选项,它并没有给调用方在号码更新时执行代码的机会,它只是给了调用方访问信息的机会

    因此,如果此类型的调用者需要使用此信息(每次值更改时),那么您应该使用与前两个选项中的一个类似的方法,以便工作人员可以“推送”信息给调用者

    如果调用方希望在需要信息时从工作者“提取”信息,则使用第三个选项

    请注意,您还可以使用一个
    Progress
    类,该类具有相应的
    IProgress
    界面,与前两个选项相当,但专门为使用进度更新UI的工作人员定制

    推式和拉式方法实际上都可以根据回溯任务的进度更新UI。如果进度很少发生,那么每次进度发生变化时都更新UI可能是有意义的,因此UI希望在这些更新发生时得到“通知”。如果更新非常频繁,那么UI可能希望有一个计时器,每隔一段时间查看一次当前状态,以避免UI因更新次数过多而负担过重

    当然,如果您正在推送信息,而不仅仅是完成百分比,那么不要丢失任何信息可能很重要,在这种情况下,您的第三种方法不是一种选择,因为在两次抓取之间可能会发生多次更新

    当然,如果您正在编写一个足够通用的worker,那么您可能希望同时公开推拉机制,让调用方选择合适的机制

    public void ProcessWork(object obj1, Action<int, int> actionProgressTracker)