2

我有一个会产生多个任务的 wcf 服务。我正在为每个任务寻找一种将信息提供回父线程(并最终通过数据合同提供给客户端)的方法

要完成的工作是在一个单独的类中。在主课上,我开始这样的任务:

        CancellationTokenSource tokenSource = new CancellationTokenSource();
        CancellationToken token = tokenSource.Token;
        Task[] arrTask = new Task[lstTasks.Count];
        int i = 0;

        foreach(LabParser classA in lstTasks)
            {
                try
                {
                   var t = Task.Factory.StartNew(clsa.ProcessLabs,token);
                    arrTask[i] = t;
                    i++;
                }
                catch (Exception e)
                {
                    string tmp = e.ToString();
                }
            }
            Task.WaitAll(arrTask);

所以在 classA.ProcessLabs 中我要做很多工作。我希望能够向这个父级发送一条消息,一些关于线程当前状态的信息。我习惯于在 vb 中使用委托和事件并引发事件来执行此操作。我似乎找不到在 C# 中执行此操作的等效方法。

4

3 回答 3

2

报告状态/进度的标准方法是通过IProgress<T>接口,通常是通过默认Progress<T>实现。

我习惯于在 vb 中使用委托和事件并引发事件来执行此操作。我似乎找不到在 c# 中执行此操作的等效方法。

同样的技术也应该适用于 C#。C# 支持具有与 VB.Net 相同的基本功能集的委托和事件,因此如果您愿意,您应该能够直接移植此代码。

于 2013-10-07T17:39:41.017 回答
0

您应该使用Task<T>,它允许回调返回一个值。

于 2013-10-07T17:39:34.753 回答
0

使用委托和事件将在 C# 中工作,与 VB 相比,语法将有所不同。

代表的辩护

/// <summary>
/// Update count delegate handler
/// </summary>
/// <param name="sender">Obect sender</param>
/// <param name="ca">Event arguments</param>
public delegate void UpdateCountHandler(object sender, TaskArgs ca);

/// <summary>
/// Update count event
/// </summary>
public event UpdateCountHandler UpdateCount;

调用事件。

// Call on the event
 this.UpdateCount(this, tsk);
于 2013-10-07T17:47:49.223 回答