在控制台应用程序中调用委托

时间:2011-08-10 13:50:29

标签: winforms asynchronous delegates console-application

我需要将WinForm应用程序迁移到控制台应用程序。

在WinForm应用程序中,我有类似的东西:

this.Invoke(new LogResponseCallback(this.LogResponse), new object[] { allAlarmsJson });


   private delegate void LogResponseCallback(string text);
    private void LogResponse(string response)
    {
        this._richTextResponse.Text = response + "\r\n";
    }

似乎在处理某个操作后调用了主线程。

我关心的是如何在Console应用程序中实现相同的异步委托调用。

任何帮助都将受到高度赞赏。

提前致谢

3 个答案:

答案 0 :(得分:1)

这是一个我询问Invoke如何做它的问题,

Curious about the implementation of Control.Invoke()

答案 1 :(得分:0)

通常在Windows窗体中,您使用Control.Invoke从后台线程返回UI线程,因为您无法访问非UI线程中的UI控件。

同样的限制不适用于控制台应用程序 - 您可能仍然需要小心避免线程问题,但它们不太可能是同样的问题。如果您所做的只是登录到控制台(例如使用Console.WriteLine),您可以在后台线程中进行日志记录。

答案 2 :(得分:0)

首先,您在代码中没有使用任何异步代理,this.Invoke是同步调用。
第二,如果你正在运行控制台应用程序,你不必将调用编组回主线程,你只应该在执行依赖于线程的代码时执行此操作,例如winforms,wpf UI线程和一些COM组件,你只需要在这些情况下编组调用,因为这些组件依赖于创建它们的线程