Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理外部不稳定的代码?_C#_Asp.net_Com - Fatal编程技术网

C# 如何处理外部不稳定的代码?

C# 如何处理外部不稳定的代码?,c#,asp.net,com,C#,Asp.net,Com,我有一个使用外部COM对象(pvxcom)的asp.netwebapi 2应用程序。由于COM对象挂起的某些原因,我没有机会报告pvxcom的错误 我需要想办法绕过这个问题。我想澄清几点 如何设置外部源的最大执行时间 如何强制浏览器重新发送请求?(可能吗?) 如何确定COM对象挂起在哪个过程中 处理com对象并重新创建是一种良好的做法吗 您还有其他想法吗?如何解决它?您可以在一个线程中运行它,如果该线程挂起或比预期的时间更长,您可以终止该线程 这是我的MVC草图,但WebApi代码将是相同的。这

我有一个使用外部
COM对象(pvxcom)的
asp.net
webapi 2
应用程序。由于COM对象挂起的某些原因,我没有机会报告
pvxcom
的错误

我需要想办法绕过这个问题。我想澄清几点

  • 如何设置外部源的最大执行时间
  • 如何强制浏览器重新发送请求?(可能吗?)
  • 如何确定COM对象挂起在哪个过程中
  • 处理com对象并重新创建是一种良好的做法吗

  • 您还有其他想法吗?如何解决它?

    您可以在一个线程中运行它,如果该线程挂起或比预期的时间更长,您可以终止该线程

    这是我的MVC草图,但WebApi代码将是相同的。这是基于:


    谢谢,但我也想得到我问题中3,4点的答案。
    public ActionResult Index()
    {
        var sw = new Stopwatch();
        Exception threadException = null;
        var workerThread = new Thread(() =>
        {
            try
            {
                sw.Start();
    
                // Access your COM here instead of sleep
                Thread.Sleep(6000);
    
                sw.Stop();
            }
            catch (Exception ex)
            {
                threadException = ex;
                sw.Stop();
            }
        });
    
        var timeoutTimer = new System.Threading.Timer((s) =>
        {
            workerThread.Abort();
        }, null, 5000, Timeout.Infinite);
    
        workerThread.Start();
        workerThread.Join();
    
    
        ViewBag.Message = String.Format("Time: {0}; Exception: {1}", sw.Elapsed, threadException);
    
        return View();
    }