是否有一个命令会停止执行我的程序?
我有一项服务,每10分钟通过telnet处理一个交换帐户。在一个执行点期间,当文件夹中没有电子邮件时,应用程序可能会收到来自telnet会话的响应,如下所示:
* 0 EXISTS
所以既然这确实不是错误我不想抛出错误 - 我只想在那时停止程序。对我来说,实际上并没有一个好的地方可以进行某种计数比较 - 不是没有重写大量的代码,所以If count < 0 Then ...
语句在这种情况下不会真正起作用恕我直言。
那么我可以在那时停止我的申请,因为如果帐户中没有电子邮件就没有意义继续吗?
<小时/> MORE INFO :来自telnet的响应是在类库中生成的。该程序未在winform或控制台应用程序中运行。 Windows服务从我的实用程序类调用一个方法,该方法通过调用项目中的其他类来启动执行。此响应在实用程序类启动的其中一个类中生成。
答案 0 :(得分:4)
Environment.Exit - 终止此过程并为底层操作系统提供指定的退出代码。
Environment.FailFast - 终止进程但不执行任何活动的try-finally块或终结器。
答案 1 :(得分:2)
如果这是一个winforms应用,Application.Exit应该有效。如果这是一个控制台应用程序,那么您希望使用return;
方法中的Main
,尽管正常运行可能会有一些工作,具体取决于程序的设置方式。
答案 2 :(得分:1)
如果这是一个控制台应用程序而你只是在Main方法中执行此操作,那么只需在那里返回它就会退出应用程序。
return;
答案 3 :(得分:0)
永久停止申请? 关闭主表单:
Private Sub mnuFileExit_Click(ByVal sender As Object, ByVal e As EventArgs) Handles mnuFileExit.Click
Me.Close()
End Sub
暂时停止几分钟? 使用计时器。
答案 4 :(得分:0)
如果您使用线程从Exchange读取,请确保通过让线程过程结束来正确完成线程。
这通常是通过使用线程可访问的布尔变量来实现的,检查该变量并退出线程函数。
答案 5 :(得分:0)
在您的服务中,您可以处理OnCustomCommand事件,然后让执行telnet处理的类通过System.ServiceProcess.ServiceController类的ExecuteCommand方法向服务发送命令。这个特殊命令基本上会告诉服务停止自身,也可以通过ServiceController对象来完成。
来自你的班级:
Dim oServCtl As System.ServiceProcess.ServiceController
oServCtl.ServiceName = "MyServiceName"
oServCtl.ExecuteCommand(128)
在您的服务范围内:
Protected Overrides Sub OnCustomCommand(ByVal command As Integer)
Dim oServCtl As System.ServiceProcess.ServiceController
If command = 128 Then
oServCtl = New System.ServiceProcess.ServiceController
oServCtl.ServiceName = "MyServiceName"
oServCtl.Stop()
oServCtl.Close()
End If
End Sub
您可以使用128及以上的自定义命令。
答案 6 :(得分:0)
VB End语句将停止执行。但是,它不会执行Dispose或Finalize函数。我认为关闭主窗体和/或退出Sub Main更好的方式。 Application.Exit也会终止vb.net程序,但只能在一些消息处理之后。