首页 > 解决方案 > 如何从 WndProc 调用异步方法?

问题描述

我有一个程序,我使用自定义消息从中调用一些方法WndProc,如下所示:

protected override void WndProc(ref Message m)
{
    switch ((uint)m.Msg)
    {
        case WM_QUIT:
            Application.Exit();
            return;
        case WM_STARTOP:
            Context.TændNas();
            m.Result = new IntPtr(1);
            break;
    }
    base.WndProc(ref m);
}

现在我想让这些方法异步。但是,我无法将async关键字添加到WndProc覆盖。

如果我制作Context.TændNasAsync一个async方法,我该如何调用它WndProc

结论

我接受@Hans Passant 的建议,创建一个事件处理程序async。这样我就可以async在 UI 线程上调用该方法,同时保持它异步 ( awaitable)。

标签: c#async-awaitwndproc

解决方案


这应该有效:

Task.Run(()=>Context.TaendNas());

更确切地说:

Task.Run(async ()=> await Context.TaendNas());

推荐阅读