c# - Action T 同步和异步

标签 c# asynchronous

我有一个 ContextMenuStrip 控件,它允许您执行两种不同风格的操作:SyncAsync

我试图用泛型涵盖所有内容,所以我这样做了:

public class BaseContextMenu<T> : IContextMenu
{
   private T executor;

   public void Exec(Action<T> action)
   {
      action.Invoke(this.executor);
   }

   public void ExecAsync(Action<T> asyncAction)
   {
       // ...
   }

如何编写异步方法以执行通用操作并同时对菜单“做某事”? 我看到 BeginInvoke 的签名是这样的:

asyncAction.BeginInvoke(this.executor, IAsyncCallback, object);

最佳答案

这是 Jeffrey Richter 关于 .NET 异步编程模型的文章。 http://msdn.microsoft.com/en-us/magazine/cc163467.aspx

这是一个如何使用 BeginInvoke 的例子:

public class BaseContextMenu<T> : IContextMenu
{
    private T executor;

    public void Exec(Action<T> action)
    {
        action.Invoke(this.executor);
    }

    public void ExecAsync(Action<T> asyncAction, AsyncCallback callback)
    {
        asyncAction.BeginInvoke(this.executor, callback, asyncAction);
    }
}

这是一个可以传递给 ExecAsync 的回调方法:

private void Callback(IAsyncResult asyncResult)
{
    Action<T> asyncAction = (Action<T>) asyncResult.AsyncState;
    asyncAction.EndInvoke(asyncResult);
}

关于c# - Action T 同步和异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2434187/

相关文章:

c# - 对 I/O 绑定(bind)操作使用异步函数

c# - 抑制警告 CS1998 : This async method lacks 'await'

c# - 颜色的数字表示

c# - 向字符串添加反斜杠

c# - 这个 telnet 实现有什么问题

javascript - 在浏览器开发工具中检查 ajax 调用是同步还是异步

android - 绘制要覆盖的 Canvas

node.js - 如何在nodejs中等待异步函数完成执行

c# - 如果 IP 地址或主机名是本地主机,如何检查 Powershell?没有域 DNS

c# - 删除特殊字符并排除一个词