2014-11-01 32 views
1

我想將一個winform應用程序轉換成控制檯應用程序。 Winform應用程序有一個代表處理程序。我如何在控制檯應用程序中編寫相同的功能?什麼是這種.InvokeRequired和this.Invoke替代如何在控制檯應用程序中使用Invoke Required和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); 
      } 

     } 
+0

蘋果和橘子。 GUI應用程序和包含'console apps'的非GUI應用程序之間的區別在於後者不**具有'消息泵「。如果您設法以某種方式在您的「控制檯應用程序」中正確顯示GUI,那麼它將根據定義成爲GUI應用程序! – MickyD 2014-11-01 13:38:41

回答

4

你不。

Invoke-跨線程機器構建在Windows消息循環之上。

如果您確實需要跨線程調用,您可以做的是創建一個隱藏窗口並啓動一個消息循環(使用UI並使控制檯不是互斥),完成您的工作,在控制檯上顯示結果,並在需要時使用Invoke在主線程上執行操作。

但是,如果您還沒有任何UI,則需要在主線程上執行操作的主要原因已消失。你跳到「什麼是相當於InvokeRequired?」沒有先找到TextBox的等價物。

+0

感謝您的回覆。文本框只是爲了顯示消息,它現在將消息發送到命名管道而不是顯示它。但是正在監聽消息的事件功能已經調用並調用了必需的。這就是爲什麼我不知道如何去做 – 2014-11-01 13:31:09

+0

@Shiv:從來沒有要求寫入到命名管道的「Invoke」。 – 2014-11-01 13:32:01

+0

我知道,在使用它的示例代碼中有一個委託。所以這就是爲什麼我試圖。 – 2014-11-01 13:33:24

相關問題