如何使用“需要调用”并在控制台应用程序中调用?

Shi*_*tal 1 c# console-application winforms

我正在尝试将Winform应用程序转换为控制台应用程序。Winform应用程序有一个delegate handler。如何在console应用程序中编写相同的功能?this.InvokeRequired和的替代品是什么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 );
    }

}
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 5

你不知道

Invoke-across线程机制是建立在Windows的消息循环的顶部。

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

但是,如果您也没有UI,则需要在主线程上执行操作的主要原因就消失了。您已经跳到“相当于InvokeRequired什么?” 无需先找到等效的TextBox。