我正在开发一个独立的应用程序,当用户登出系统时需要做一些操作(我需要在某些URL上发布一些请求)。
我尝试使用Application.ApplicationExit
和AppDomain.CurrentDomain.ProcessExit
事件或使用析构函数实现此目的,但不是这样做。
我会很感激有关如何做到的一些提示。
以下是我的主要功能的一些片段:
[STAThread]
static void Main()
{
...
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ApplicationExit += Application_ApplicationExit;
AppDomain.CurrentDomain.ProcessExit += Application_ApplicationExit;
Application.Run();
}
static void Application_ApplicationExit(object sender, EventArgs e)
{
File.Create("C:\\kod\\test5.txt");
}
我正在尝试使用创建文件来测试此行为(更容易看到结果)。
希望这次会更清楚。
答案 0 :(得分:0)
要使Windows窗体可见,您需要在Application.Run()方法中传递Form对象。
Application.Run();
击> 传递表单以使其可见。
Application.Run Method (Form)
答案 1 :(得分:0)
确定。根据你们的一些建议,我想出了一个令人满意的解决方案。
我创建了一个最小化的,没有在任务栏表单中显示(因此它对用户是不可见的)并覆盖
我在WM_QUERYENDSESSION
和WM_ENDSESSION
消息上运行代码时的WndProc。
还有一些代码:
public class BlockingForm : Form
{
public delegate void SessionEnd();
public event SessionEnd SessionEndEvent;
public BlockingForm()
{
WindowState = FormWindowState.Minimized;
ShowInTaskbar = false;
}
protected override void WndProc(ref Message aMessage)
{
const int WM_QUERYENDSESSION = 0x0011;
const int WM_ENDSESSION = 0x0016;
if (aMessage.Msg == WM_QUERYENDSESSION || aMessage.Msg == WM_ENDSESSION)
{
OnSessionEnd();
}
base.WndProc(ref aMessage);
}
private void OnSessionEnd()
{
var handler = SessionEndEvent;
if (handler != null) handler();
}
}
最有帮助的评论是来自@Sinatr的评论。 THX。