如何在这个非常简单的应用程序中获得结束活动?这是一个无窗口的winforms应用程序。我不想要托盘图标,至少不是一个可见的托盘图标。
Module Module1
Sub Main()
While True
MsgBox("I am still alive!")
System.Threading.Thread.Sleep(10000)
End While
End Sub
' how do I call this?
Public Sub ProgramClosing()
MsgBox("Program is closing. Good Bye.")
End Sub
End Module
更新
以下代码有效,但出于某种原因,我收到两条消息"程序结束。再见。"而不是一个。
Module Module1
Sub Main()
AddHandler Application.ApplicationExit, AddressOf AppClosing
For i = 0 To 2
MsgBox(i & vbCrLf & "I am still alive!")
System.Threading.Thread.Sleep(5000)
Next
Application.Exit()
End Sub
Private Sub AppClosing(sender As Object, e As EventArgs)
MsgBox("Program closing. Good Bye.") ' THIS IS SHOWN TWICE
End Sub
End Module
更新#2
我已经测试过,当Windows实际关闭时,此事件是否会触发,而事实并非如此。
我使用下面的代码构建了应用程序,启动了应用程序(在Visual Studio之外),确认它正在使用任务管理器运行并关闭了计算机。文件" DebugFile.txt "从来没有被创造过。
Module Module1
Sub Main()
AddHandler Application.ApplicationExit, AddressOf AppClosing
While True
' do tasks here
System.Threading.Thread.Sleep(10000)
End While
End Sub
Private Sub AppClosing(sender As Object, e As EventArgs)
RemoveHandler Application.ApplicationExit, AddressOf AppClosing
System.IO.File.AppendAllText("DebugFile.txt", "App closed at " & Now.ToString & vbCrLf)
End Sub
End Module
答案 0 :(得分:1)
如果应用程序应该不断运行,那么我会将其更改为Win From而不是控制台(我将附加C#示例,您可以轻松转换为VB.Net。 您可以使用表单中的以下内容加载没有任何GUI的winform应用程序 加载事件:
private void Form1_Load(object sender, EventArgs e)
{
this.Hide();
this.Visible = false;
this.Opacity = 0;
this.ShowInTaskbar = false;
}
您还可以在以下帖子中查看更多详细信息How can I hide my application's form in the Windows Taskbar? 现在,使用表单结束事件来做你想做的事。
private void frmMonitor_FormClosing(object sender, FormClosingEventArgs e)
{
//Your exit code
}
它应该只运行一次。
另一种选择是运行 FormClosed事件,该事件将在表单关闭后执行。
希望它有所帮助,
Liron
答案 1 :(得分:-1)
基本上,只要while循环结束,你的程序就会“关闭”。也就是说,除非你在此之后输入代码,否则程序将退出。如何在End While
之后立即调用ProgramClosing()?
哦,我愚蠢地没有注意到你的while循环是无限的,正如@ 436f6465786572在他/她的评论中所说的那样。所以添加一些方法来退出循环。