应用程序退出事件未在c#windows应用程序中触发

时间:2009-07-21 02:26:12

标签: c#

我正在使用以下类来隐藏和显示Windows任务栏。 我打电话给下面这个班。

问题:当我启动应用程序时,任务栏完全隐藏。 但是当我通过停止调试退出应用程序时,任务栏就是 没有出现。我的意思是应用程序出口没有在我的代码中触发。 我需要这样一种方式,不管我关闭我的应用程序的方式,它都会发抖 在退出之前最终显示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();
    }
}

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

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

当你停止调试时,这是程序的“粗鲁”退出,之后什么都没有。 MSFT自己的Visual Studio集成Web浏览器也受此影响。如果这对您来说非常重要,您可能需要考虑在后台运行一些事情来处理这个清理并且不在调试器的上下文中运行?

我认为没有办法捕捉“停止调试”事件,但我希望被证明是错误的:)