我正在使用第三方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客户端,而是在计时器tick事件中发送数据。在这种情况下,没有发生错误,程序运行顺利。你能说一下为什么使用tcp客户端发生这个错误以及我如何摆脱它?
答案 0 :(得分:0)
您没有提供足够的详细信息来解释错误是什么。但是,您的代码将受益于使用try {} catch {}
来“处理”异常。例外情况包含您要查找的详细信息。
public void UpdateValues(
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);
}
在此示例中,异常消息和堆栈跟踪将打印到控制台。查看此输出中的异常原因。
答案 1 :(得分:0)
在.NET 4及更高版本中,您需要使用UpdateValues
和HandleProcessCorruptedStateExceptionsAttribute
标记包含方法(SecurityCriticalAttribute
)以捕获一些特殊异常,例如AccessViolationException