【问题标题】:Prevent unwanted close of program on crash (including with TRY-CATCH)防止程序在崩溃时意外关闭(包括使用 TRY-CATCH)
【发布时间】:2014-01-16 11:12:45
【问题描述】:

我在我的系统中使用第三方软件来控制代理。
所以每个网络连接都使用该代理软件。
在我的 Windows 应用程序中,我有一些用于通过 FTP 上传文件的代码。
我在 ftp 类和主应用程序中有很多 try-catch,以防止显示任何错误并停止应用程序。
当该代理软件运行并且该 ftp 类尝试连接到我的服务器时,我突然关闭了该代理软件,我的程序因未知原因而关闭。
我怎样才能防止该程序在崩溃时关闭并使其保持活力?
为什么那些 tr-catch 不能做他们的工作?

编辑 1:
那些捕获部分永远不会运行以获得错误。
请看这张照片:

但正常的异常窗口是这样的:

编辑 2:
我的 try/catch 如下所示:

class My_FTP
{
    public void upload()
    {
      try
      {
        //Codes

        CRASH IS HERE AND WE NEVER JUMP TO CATCH EREA!!!!!!!!!!!!!!!!!!!!

        while (bytesSent != 0)
       {

       }
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.ToString());
      }
    }
}


private void Form1_Load(object sender, EventArgs e)
{
  try
  {
    My_FTP my_ftp_ = new My_FTP();
    my_ftp_.upload();
  }
  catch (Exception ex)
  {
    Console.WriteLine(ex.ToString());
  }

  try
  {
    //Other_Codes;
  }
  catch (Exception ex)
  {
    Console.WriteLine(ex.ToString());
  }

}    

我试过这些:

Thread: "vshost32-clr2.exe has stopped working" -> 不是以编程方式

VShost32.exe stopped working, but I can continue debugging -> 没有帮助

【问题讨论】:

  • try catch 代码在哪里?你得到了什么异常(如果你正在捕获异常,你应该记录它们或对它们做一些事情)
  • @你的编辑:那是你现在遇到的问题/你解决了这个问题吗?
  • ....我在那里问了 2 个问题

标签: c# ftp crash windows-applications


【解决方案1】:

这可能是因为第三方库中的原生代码,你无法通过这种方式捕获原生异常,我在 C# 中使用 LibVlc 时遇到了类似的问题,

您可以在这里找到一些帮助来捕获本机异常 (http://msdn.microsoft.com/en-us/magazine/dd419661.aspx)

类似问题Can you catch a native exception in C# code?

也尝试从 catch 语句中删除 (Exception ex)

【讨论】:

    【解决方案2】:

    也许您应该在捕获异常时添加某种日志记录。您的程序正在关闭的原因是,当抛出异常时,该方法正在退出,导致您的 Main 方法退出。

    【讨论】:

      【解决方案3】:

      在您的 try catch 块中尝试在 catch 中添加一些逻辑,例如:

      catch(Exception e)
      {
         MessageBox.Show("Error: " + e.Message, "Exception Thrown", MessageBoxButtons.OK, MessageBoxIcon.Error);
         OtherMethod(); //Or something like this
      }
      

      显然会有更好的方法来解决这个问题,我只是提供一个简单的解决方案。

      【讨论】:

      • @MoonLight 你有没有试过把任何东西放进去?
      • 是的,请看那些图片。那些捕获部分永远不会运行以获得错误,这就是我问这个问题的原因。
      • @MoonLight 这有帮助吗? forums.arcgis.com/threads/…
      • 是的,这正是我想告诉你的。但以编程方式给我一个解决方案。由于我的程序,我不能告诉人们改变他们的控制面板......
      • @MoonLight True, true.. 试试这个:确保您的所有项目都使用相同的框架版本(最好是 4.0),因为 VS 2010 不喜欢在 X64 位模式下进行混合模式框架调试。也试试这个:在你的项目属性下,进入调试选项卡并启用非托管代码调试。
      猜你喜欢
      • 2017-05-17
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      相关资源
      最近更新 更多