我需要将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应用程序中实现相同的异步委托调用。
任何帮助都将受到高度赞赏。
提前致谢
答案 0 :(得分:1)
这是一个我询问Invoke如何做它的问题,
答案 1 :(得分:0)
通常在Windows窗体中,您使用Control.Invoke
从后台线程返回UI线程,因为您无法访问非UI线程中的UI控件。
同样的限制不适用于控制台应用程序 - 您可能仍然需要小心避免线程问题,但它们不太可能是同样的问题。如果您所做的只是登录到控制台(例如使用Console.WriteLine
),您可以在后台线程中进行日志记录。
答案 2 :(得分:0)
首先,您在代码中没有使用任何异步代理,this.Invoke
是同步调用。
第二,如果你正在运行控制台应用程序,你不必将调用编组回主线程,你只应该在执行依赖于线程的代码时执行此操作,例如winforms,wpf UI线程和一些COM组件,你只需要在这些情况下编组调用,因为这些组件依赖于创建它们的线程