2013-02-21 218 views
0

我正在用一個WPF可執行文件替換很多批處理文件,這些文件幾乎完全相同。我寫了這個程序,但是我在顯示器等「控制檯」上遇到麻煩。創建控制檯,如進度窗口

在程序中,我調用可執行文件來執行任務。該可執行文件將其輸出消息發送到控制檯。我能夠將這些重定向到我的「控制檯」,如下所示。

Process p = new Process(); 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.RedirectStandardError = true; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.CreateNoWindow = true; 

p.StartInfo.FileName = MyExecutable; 
p.StartInfo.Arguments = MyArguments; 
p.Start(); 

while (!p.StandardOutput.EndOfStream) 
{ 
    string _output = p.StandardOutput.ReadLine(); 

    // This is my display string ObservableCollection 
    _displayString.Add(new DisplayData { _string = _output, _color = System.Windows.Media.Brushes.Black, _fontSize = 12 }); 

    // This is to redirect to a Console & what I want to get rid of 
    Console.WriteLine(_output); 
} 

p.WaitForExit(); 

當可執行文件運行完成後,我使用MessageBox詢問用戶他們是否想要再次運行可執行文件。問題是,當MessageBox啓動時,用戶無法在我的「控制檯」上像窗口一樣滾動以做出翔實的決定。要臨時解決此問題,我在啓動時啓動控制檯,請參閱this,並將運行可執行文件的進程的輸出流寫入控制檯,以便用戶可以滾動瀏覽信息並作出決定。

我正在使用列表框來顯示文本塊的集合,請參閱this。我沒有附加任何東西來製作顯示屏或MessageBox。

我該如何製作一個「控制檯」,如顯示器,它將接受用戶輸入(MessageBox,直接輸入等),還允許他們在做出決定之前滾動瀏覽數據?

編輯: 至於我收到的意見,我不清楚我想要完成什麼。我有一個批處理文件,每次運行多次使用不同的參數運行可執行文件。可執行調用之前和之間有很多設置。我創建了一個可執行文件,用於使用下拉菜單替換許多類似的批處理文件,以便用戶在運行時更改設置。當用戶喜歡他們的設置時,他們點擊一個「開始」按鈕,然後離開它進行設置並提出問題,然後最終運行可執行文件。

我的問題是當被調用的可執行文件在我的內部完成運行時,用戶需要決定是否由於不同的原因再次運行它。我需要提醒用戶「再次運行 - '是'或'否'?」,這就是我遇到問題的地方。 MessageBox不允許我在我的進度窗口上滾動。我嘗試了一個Modeless對話框,但是使用Show()程序繼續,並且ShowDialog()與MessageBox相同。

如何做到這一點的任何建議,將不勝感激。

+0

你的問題不清楚。你沒有顯示你的「問題代碼」的例子,但提供許多無用的信息。如果你不想阻塞你的窗口 - 使用無模式對話框。 – Maximus 2013-02-21 18:34:19

+0

你確實需要一個消息框嗎?您是否可以在窗口底部留言2個按鈕是和否? – failedprogramming 2013-02-21 22:29:57

+0

@Maximus我確實嘗試了這個,但是使用Show()它只是繼續,而使用ShowDialog()它不會讓我滾動。 – Bluto 2013-02-22 14:37:15

回答

0

你在Windows中,但試圖使用DOS範例。 Windows是基於事件的系統!您需要編寫「事件處理程序」,但不要將所有代碼放在一個函數中。

但是,有一個技巧,它允許在Modeless中顯示Modal(讀取「阻止您的代碼」)對話框(請閱讀「不阻止您的窗口」)。不知道如何在WPF中實現這一點,但想法是重新啓用您的窗口(它作爲您的對話框的父級)。您需要在對話框事件處理程序中執行此操作(相當於WM_INITDIALOG?)。

另外(在WinAPI中),您可以運行對話框NULL作爲父窗口。

+0

你的「閱讀」鏈接?如果他們是他們沒有鏈接。 – Bluto 2013-02-25 16:24:29