2012-10-23 253 views
-1

我不打算詳細說明爲什麼要嘗試這樣做,而不是讓主應用程序執行此操作。我認爲現在對我來說更容易。但我將來不會使用這種技術。通過Windows窗體應用程序啓用控制檯應用程序

在我的情況下,主表單有一個打開另一個表單的按鈕。在第二個你可以調整數量,暫停,恢復和停止控制檯應用程序的工作(聲音完全無用(也許愚蠢),但是,就像我說的,我不打算詳細說明爲什麼)。這意味着應用程序必須能夠訪問整個程序的所有變量和資源,反之亦然。

我知道如何通過主窗體啓動一個新表單,但我不知道如何啓動控制檯應用程序。

編輯:

我忘了提及的是,控制檯應用程序是解決方案的一部分。

回答

1

您可以直接調用Main。小心在UI線程上直接做到這一點!

SomeConsoleApp.Main(new string[]{"-O", "File 1.txt", "-some-parameter"}); 

或者,如果你只有一個exe,你可以這樣做:

System.Diagnostics.Process.Start("someconsoleapp.exe"); 
+0

我以某種方式期待一個更復雜的答案... – AlexSavAlexandrov

1

如果你想兩個進程之間的溝通,看看這個庫這裏之間進行通信:

https://github.com/TheCodeKing/XDMessaging.Net

它可以讓你從一個應用程序發送消息給對方。例如,App1在通道「randomkey」上向ConsoleApp1發送一條消息「stop」,ConsoleApp1可以在通道「randomkey」上偵聽並攔截「stop」消息並停止其當前處理。

如果您只想打開控制檯窗口,只需使用System.Diagnostics.Process.Start();

+0

在我的情況下,沒有太多的溝通:只是一些布爾變量在第二種形式被改變。變量值的更改會導致控制檯應用程序停止,暫停和恢復過程。有兩個整數可以在工作開始之前調整工作量。通信將發生在變量上,而不是命令。 – AlexSavAlexandrov

+0

發送的消息是字符串,因此您可以解析Console應用程序中的消息,並根據收到的字符串內容更改值。監聽器被添加爲事件處理程序,所以您只需要將代碼解析爲字符串並從事件方法中修改變量即可。每當通過事件檢測到主應用程序發生更改時,您都可以使用該事件將字符串發送到控制檯應用程序。 – Lunyx

2

您的要求有點含糊; 「應用程序必須能夠訪問整個程序的所有變量和資源,反之亦然」。 '變量和資源'不能跨進程共享,你需要某種形式的進程間通信。

如果您的控制檯應用程序僅僅需要傳達回調用形式的應用程序,一個RPC成功然後使用控制檯應用程序退出代碼,請參見:How do I return a value from a console application to a service in .NET?

否則這已經回答了前:Getting the ouput from Console window into Winform application

+0

在「應用程序必須能夠訪問整個程序的所有變量和資源,反之亦然」這句話中,「應用程序」的意思是「控制檯應用程序」,而「整個程序」是指所有的解決方案被編譯。在我的情況下,我不需要從控制檯應用程序返回值。 – AlexSavAlexandrov

相關問題