我可以在执行期间以任何其他方式停止程序而不是抛出错误吗?

时间:2009-08-19 19:17:56

标签: c# .net vb.net .net-2.0

是否有一个命令会停止执行我的程序?

我有一项服务,每10分钟通过telnet处理一个交换帐户。在一个执行点期间,当文件夹中没有电子邮件时,应用程序可能会收到来自telnet会话的响应,如下所示:

* 0 EXISTS

所以既然这确实不是错误我不想抛出错误 - 我只想在那时停止程序。对我来说,实际上并没有一个好的地方可以进行某种计数比较 - 不是没有重写大量的代码,所以If count < 0 Then ...语句在这种情况下不会真正起作用恕我直言。

那么我可以在那时停止我的申请,因为如果帐户中没有电子邮件就没有意义继续吗?

<小时/> MORE INFO :来自telnet的响应是在类库中生成的。该程序未在winform或控制台应用程序中运行。 Windows服务从我的实用程序类调用一个方法,该方法通过调用项目中的其他类来启动执行。此响应在实用程序类启动的其中一个类中生成。

7 个答案:

答案 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程序,但只能在一些消息处理之后。