2009-07-21 69 views
1

我正在使用下面的類來隱藏和顯示窗口任務欄。 我打電話給下面的班級。應用程序退出甚至不在C#窗口應用程序中觸發

問題:當我啓動應用程序時,任務欄完全隱藏。 但是當我通過停止調試退出應用程序時,任務欄 沒有顯示出來。我的意思是應用程序退出不在我的代碼中觸發。 我需要這樣的一種方式,無論我如何關閉應用程序,它都會在退出之前不斷地顯示tashbar()。

請幫忙。謝謝。

方案:


static class Program 
{ 

    [STAThread] 
    static void Main() 
    { 
     Taskbar.Hide(); 
     Form1 TargerForm = new Form1(); 
     Application.ApplicationExit += new EventHandler(Application_ApplicationExit); 
     Application.EnableVisualStyles(); 
     Application.Run(TargerForm); 
    } 
    static void Application_ApplicationExit(object sender, EventArgs e) 
    { 
     Taskbar.Show(); 
    } 
} 

類:


public class Taskbar 
{ 
    [DllImport("user32.dll")] 
    public static extern int FindWindow(string className, string windowText); 
    [DllImport("user32.dll")] 
    public static extern int ShowWindow(int hwnd, int command); 

    public const int SW_HIDE = 0; 
    public const int SW_SHOW = 1; 

    public int _taskbarHandle; 
    protected static int Handle 
    { 
     get 
     { 
      return FindWindow("Shell_TrayWnd", ""); 
     } 
    } 

    public Taskbar() 
    { 
     _taskbarHandle = FindWindow("Shell_TrayWnd", ""); 
    } 

    public static void Show() 
    { 
     ShowWindow(Handle, SW_SHOW); 
    } 

    public static void Hide() 
    { 
     ShowWindow(Handle, SW_HIDE); 
    } 
} 

回答

1

爲什麼不直接調用Application.Run之後調用Taskbar.Show()? Application.Run將阻塞,直到表單關閉。

您的代碼看起來是這樣的:

[STAThread] 
static void Main() 
{ 
    Taskbar.Hide(); 
    Form1 TargerForm = new Form1(); 
    Application.ApplicationExit += new EventHandler(Application_ApplicationExit); 
    Application.EnableVisualStyles(); 
    Application.Run(TargerForm); 
    Taskbar.Show(); 
} 
+0

你是什麼意思,「仍然沒有解決」?當TargetForm完成運行時,Taskbar.Show()將執行。想想看,看起來有趣的一行是App.Run行,它應該看起來像Application.Run(新的TargetForm()) – 2009-07-21 15:31:11

0

當你停止調試,這是一個「粗魯」退出程序,並沒有什麼之後,將觸發。 MSFT自己的Visual Studio集成web瀏覽器也遭受這種情況。如果這對你來說非常重要,那麼你可能會考慮在後臺運行某些東西來處理這個清理問題,而不是在調試器的上下文中運行?

我不認爲有一種方式來捕捉一個「停止調試」事件,但我很樂意被證明是錯誤:)

+0

@Dave Markle,它聽起來很溫順。 有沒有這方面的一些解決方案。我猜。 爲什麼這是退出應用程序的粗魯方式。我是否有其他良好的做法來停止正在運行的應用程序? 謝謝。 – Anuya 2009-07-21 02:36:08