C# 如何在控制台应用程序中使用Invoke Required和Invoke?

C# 如何在控制台应用程序中使用Invoke Required和Invoke?,c#,winforms,console-application,C#,Winforms,Console Application,我正在尝试将Winform应用程序转换为控制台应用程序Winform应用程序有一个委托处理程序。如何在控制台应用程序中编写相同的功能?this.invokererequired和this.Invoke public delegate void DelegateMessage( string Reply ); _pipeServer.PipeMessage += new DelegateMessage( PipesMessageHandler ); private void PipesMess

我正在尝试将
Winform
应用程序转换为控制台应用程序
Winform
应用程序有一个
委托处理程序
。如何在
控制台
应用程序中编写相同的功能?
this.invokererequired
this.Invoke

public delegate void DelegateMessage( string Reply );

_pipeServer.PipeMessage += new DelegateMessage( PipesMessageHandler );

private void PipesMessageHandler( string message ) {
    try {
        if ( this.InvokeRequired ) {
            this.Invoke(new NewMessageDelegate(PipesMessageHandler), message);
        }
        else {
            txtMessage.Text = message;
        }
    } catch ( Exception ex ) {
        Debug.WriteLine( ex.Message );
    }

}
你没有

跨线程调用机制是建立在Windows消息循环之上的

如果您真的需要跨线程调用,您可以做的是创建一个隐藏窗口并启动一个消息循环(使用UI和控制台不是互斥的),完成工作,在控制台上显示结果,并在需要时使用Invoke在主线程上执行操作


但是,如果没有任何UI,那么需要在主线程上执行操作的主要原因也就不存在了。您已经跳转到“调用所需的
的等价物是什么”
?,而没有首先为文本框找到等价物。

谢谢您的回复。Textbox只是用来显示消息,它现在将消息发送到指定的管道,而不是显示消息。但是侦听消息的事件功能具有invoke和invoke required。这就是为什么我不知道该怎么做it@Shiv:
Invoke
在写入命名管道时从来都不是必需的。我知道,示例代码中有一个委托正在使用它。这就是我尝试的原因。@Shiv:这种模式只会导致当前函数在不同的线程上运行。当函数不使用任何具有线程关联性的代码时,不需要替换它。把它全部擦掉,只留下“在这个线程上运行是好的”路径,因为在这个线程上运行是好的。好的,我明白你的意思。谢谢你,本+谢谢你让我明白了逻辑。苹果和桔子。GUI应用程序和非GUI应用程序(包括
控制台应用程序
)之间的区别在于后者没有
消息泵
。如果您设法在“控制台应用程序”中正确显示GUI,那么根据定义,它将是一个GUI应用程序<代码>文本框控件不应位于
控制台
应用程序中!!!