在做一个爬虫程序,运行一段时间后。程序没反应了。
怀疑是.net崩掉了。有没有方法处理这种情况?二个线程,用于分析+使用异步下载网页

解决方案 »

  1.   

    添加try catch
    资源消耗
    这样很难判断,优化代码
      

  2.   

    崩掉,连异常都不抛吗?
    理论上所有winform的未处理异常都可以在Program.cs里解决掉的Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
    Application.Run(new Form1());static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
    //记录异常
    }
      

  3.   

    在Program 里面加try
    catch其实我觉得 一般都是可能出异常的位置就需要catch掉的
      

  4.   

    就是try catch不到啊
    后台也输出了信息。程序就是不动了
      

  5.   

    ThreadException 只是捕获主form的异常,也就是主线程的异常,如果你在程序中开启了其他工作线程,工作线程发生异常 ThreadException 是捕获不到的,并且.net 2.0以后的版本都会让程序结束掉,没有办法阻挡,所以工作线程一定要有异常处理。可以用appdomain的unhandleexception在程序结束前做一些处理,这个可以捕获到工作线程的异常,但是不能阻止程序被终止
      

  6.   

    除了异常捕捉外,将后台线程的信息反映到前台线程是需要一个特殊处理的,我记得好像要执行Invoke委托.
      

  7.   

    写一个Monitor程序,这个程序就干一件事情,看好你的网络爬虫程序,在Monitor中,创建Process对象,去启动你的爬虫程序,然后定时检查这个Process是否还正常,如果不正常就重新启动一个新的!
    private void CheckProcessStatus()
    {
    // check two abnormal cases:
    // 1. process has existed somehow
    // 2. process doesn't response this.Cursor=System.Windows.Forms.Cursors.Default;
    if (process.HasExited)
    {
    StartNewProcess("监控没有发现进程,将马上启动它!");
    }
    if(!process.Responding)
    {
    // close this one
    ShutdownProcess("监控发现进程没有响应,强制关闭它!");
    // start a fresh one
    StartNewProcess("监控强制关闭没有响应的进程后,启动一个新的!");
    }
    }       
    // everthing looks fine
    }
      

  8.   

    1、那你要先找好到什么原因了。
    2、启动程序时,用Process一样可以传递参数的。
      

  9.   

    这种情况当然是要写tracelog啊~如果没有工具的话,就简单的在每一行代码下面输出一行变量内容的log.
      

  10.   

    请问一下,如果看门狗程序,被kill的话,也结束 主程序怎么办
    即 A 被Kill
       B 就应该被kill   A 启动
       B 也启动   
      

  11.   

    使用PostMessage 方法
     A 程序在线程中,每隔5秒,发送一次 信息. 如果B程序没启动,则先启运B
     
     B 程序,开一个线程,判断上一次收到信息的时间,如果超过30秒没有收到了信息了,强制终止A 程序. 然后重新启动A。并发送一个信息,通知道A 程序应该 运行哪个方法。而且A每隔5分钟,保存线程信息。A程序启动时 加载相关参数。看门狗程序基本完成了。现在只等测试了谢谢大家的回复。明天结贴