2009-07-21 13 views
1

私は以下のクラスを使用してWindowsのタスクバーを非表示にしています。 私は以下のようなクラスを呼び出しています。アプリケーション終了がC#windowsアプリケーションでも発生しない

問題:アプリケーションを起動すると、タスクバーが完全に隠れています。 しかし、私はデバッグを停止してアプリケーションを終了すると、タスクバーは ではありません。アプリケーション出口が私のコードで起動していないことを意味します。 私はアプリケーションを閉じる方法は問わず、終了する前にタキシバー()を最後に に表示するような方法が必要です。

助けてください。ありがとう。

PROGRAM:


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(); 
    } 
} 

CLASS:


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

あなたは何を意味するか、「まだソリューション」? Taskbar.Show()は、TargetFormの実行が終了すると実行されます。それを考えると、面白そうに見える行はApp.Run行です。Application.Run(new TargetForm())のようになります。 –

0

デバッグを停止すると、それはその後のプログラムに「失礼」終了だし、何が発生します。 MSFT独自のVisual Studio統合Webブラウザもこれに苦しんでいます。これが非常に重要なのであれば、このクリーンアップを処理し、デバッガのコンテキストで実行されないバックグラウンドで何かを実行することを検討したいでしょうか?

私は、「デバッグの停止」イベントをキャプチャする方法があると思いませんが、私は間違って証明するのが大好きです:)

+0

@Dave Markle、それはうそつき音です。 これにはいくつかの解決策があります。私は推測する。 これはアプリケーションを終了するための無礼な方法です。実行中のアプリケーションを停止する他の良い方法はありますか?おかげさまで – Anuya

+0

フォームに終了ボタンを配置してみませんか?そして、Clickイベントハンドラの内部でApplicationExitを呼び出しますか? –

+0

@ Jason Down、私のapplictionはスレッドで実行されています。 バックグラウンドジョブです。アプリにはフォームはありません。 スレッドを終了する唯一の方法は、タスクマネージャでスレッドを終了することです。おかげさまで – Anuya

関連する問題