2010-08-02 61 views
4

我有一個(C#).NET GUI應用程序。我需要控制檯來顯示一些輸出。代碼(寫入控制檯)包含Console.WriteLine語句由BackgroundWorker &執行而非主線程。當由BackgroundWorker執行時,Console.Write不起作用。GUI應用程序

有人建議,在這裏:Console.Write in .NET GUI Application,使您的應用程序類型Console Application而不是「Windows應用程序」將執行此項工作。但是這隻在主線程(GUI線程)寫入控制檯時才起作用。更重要的是,我不需要在應用程序啓動時顯示控制檯。我只希望當後臺工作人員開始工作並完成工作時,我希望控制檯消失。

如何根據需要顯示控制檯?

回答

3

我想你可能想保留你的應用程序作爲WinForms應用程序,然後使用AllocConsoleFreeConsole來根據需要創建和刪除控制檯。

由於您只想從工作線程使用它,我認爲它可能會工作,如果您在工作線程中創建它。

請注意,我還沒有嘗試上述,所以我不知道它是否會起作用。

+0

我試過了。有效! – claws 2010-08-02 14:22:31

1

將此代碼添加到您的類:現在

[DllImport("kernel32.dll")] 
    static extern bool AllocConsole(); 
    [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)] 
    static extern bool FreeConsole(); 

,在你的BackgroundWorker。

private void backgroundWorker1_DoWork(Object obj, DoWorkEventArgs e) 
    { 
     AllocConsole(); 
     // do the task of your background worker here here 
     FreeConsole(); 
    } 
相關問題