4

我编写了一个 C# Windows Forms 应用程序,而不是一个在无限循环中运行的后台线程的服务(它仅在用户登录并具有图形用户界面时使用)。

但是,当我尝试关闭 Windows (7) 时,它告诉我程序正在阻止它关闭或注销,并询问我是否要强制关闭。

现在,我的程序是否有可能意识到(获取处理程序)Windows 试图退出或注销?

所以,我需要的是让应用程序在 Windows 尝试退出时意识到。

提前致谢。

编辑:谢谢你的好建议!如果它有一个 CANCEL 事件处理程序,是否可以以任何方式将这个想法与表单关闭事件一起使用?

4

4 回答 4

10
public Form1()
{
    InitializeComponent();

    this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
}

void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    // Or any of the other reasons suitable for what you want to accomplish
    if (e.CloseReason == CloseReason.WindowsShutDown)
    {
        //Stop your infinite loop
    }
}
于 2010-03-23T08:42:50.753 回答
5

您将该线程称为“后台线程”,但它有IsBackground = true;吗?
系统只会停止一个线程。

于 2010-03-23T08:43:03.283 回答
2

我认为Capture 控制台出口 C#也应该在您的场景中可用。

除此之外,也许将您的线程设置为后台线程就足够了?

于 2010-03-23T08:35:37.383 回答
1

查看Microsoft.Win32.SystemEvents.SessionEnding事件。

于 2010-03-23T08:37:38.417 回答