1

我是 C# 新手,正在开发一个基于事件的系统来处理来自线程的输入。UI 必须根据从线程接收到的响应进行更新。我在其中一篇文章中找到并在表单上使用了 BeginInvoke。然而,我的问题是,

class CustomDispatcher
{
    public void Routine1()
    {}
    public BeginInvoke()
    {
        // like in control.BeginInvoke((MethodInvoker)delegate{ Routine1(); });
        // This should execute Routine1 asynchronously. This BeginInvoke will be called from a different thread.
    }
}

当使用表单实例时,BeginInvoke 运行良好。但是,我不知道是否可以将表单的这种分派功能模拟到我的类实例中。

任何帮助是极大的赞赏。

提前致谢。

4

1 回答 1

4

一般来说,如果你正在创建一个新的 API,并且想要编写异步方法,我强烈建议你围绕TaskTask<T>类来设计你的 API。

这将允许它直接使用 C# 5 中的async/await支持。

在您的情况下,由于Routine1是一个 void 方法,您可以编写一个异步处理它的方法,即:

public Task Routine1Async()
{
    // Perform the work asynchronously...
}

或者,使用 C# 5:

public async Task Routine1Async()
{
    // Perform the work taking advantage of the await keyword...
    await SomeOtherMethodAsync(); // etc
}

话虽这么说,如果这纯粹是要调用Task.Runor Task.Factory.StartNew,我会将其从您的 API 中排除,并让调用者根据需要将其转换为异步方法。我不建议制作仅包装同步 API 的异步 API。

于 2013-08-05T21:42:43.567 回答