-1

我正在使用 3rd 方 dll 创建一个 Windows 应用程序。他们给出了一些预定义的方法来使用。有一种方法SetTag()用于更新值。现在我的工作是从 tcp 客户端获取数据并发送到这个方法。我的 tcp 部分运行良好,我已经测试过了。问题发生在我打电话的时候SetTag()。它在一段时间内运行良好,但在一段时间后,它显示即时调试器弹出异常

myproject.vshost.exe 中出现未处理的异常

我不明白这个异常是从哪里发生的。

每当我从 tcp 客户端获取数据时,都会调用我UpdateValues()的,它调用第三方SetTag()

// valuesInArray is an object array which contain
// the data from tcp client after converted to object
UpdateValues(valuesInArray); 

和方法:

public void UpdateValues(object[] values)
{
    this.BeginUpdate();
    for (int i = 0; i < 9; i++)
    {
        this.SetTag(TagHandle[i], (values[i]), Quality.Good, FileTime.UtcNow);
    }
    this.EndUpdate(false);
}

我创建了一个模拟器,其中数据不是来自 tcp 客户端,而是在计时器滴答事件中发送数据。在这种情况下,不会发生错误并且程序运行顺利。您能建议为什么使用 tcp 客户端会发生此错误以及如何摆脱它吗?

4

2 回答 2

0

您没有提供足够的详细信息来解释错误是什么。但是,您的代码将受益于使用 atry {} catch {}来“处理”异常。例外具有您正在寻找的详细信息。

公共无效更新值(

object[] values)
{
    this.BeginUpdate();
    for (int i = 0; i < 9; i++)
    {
        try
        {
            this.SetTag(TagHandle[i], (values[i]), Quality.Good, FileTime.UtcNow);
        }
        catch (Exception e)
        {
            // Log or print out the details
            Console.WriteLine("Error occurred setting the value.");
            Console.WriteLine(e);
        }
    }
    this.EndUpdate(false);
}

在此示例中,异常消息和堆栈跟踪将打印到控制台。在此输出中查找异常的原因。

于 2013-10-10T07:13:30.673 回答
0

在 .NET 4 及更高版本中,您需要用 标记包含方法 ( UpdateValues)HandleProcessCorruptedStateExceptionsAttributeSecurityCriticalAttribute捕获一些特殊异常,例如AccessViolationException

于 2013-10-10T08:45:26.770 回答