当我编译没有错误,但我有这个异常(System.AccessViolationException),即使这是一个非常简单的代码,我是新的c#,不能找到问题的URL是正确的,但它确实连接到我的服务器,我使用正确的包,但我不扫描标记的异常是在行:opcDaBrowseElement[]元素=浏览器.获取元素(项目ID);
例外情况:系统访问违规异常:'试图读取或写入受保护的内存。这通常表示其他内存已损坏。'
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TitaniumAS.Opc.Client.Common;
using TitaniumAS.Opc.Client.Da;
using TitaniumAS.Opc.Client.Da.Browsing;
using System.Threading;
namespace OPCDA
{
class Program
{
static void Main(string[] args)
{
TitaniumAS.Opc.Client.Bootstrap.Initialize();
Uri url = UrlBuilder.Build("Matrikon.OPC.Simulation.1");
using (var server = new OpcDaServer(url))
{
server.Connect();
var browser = new OpcDaBrowserAuto(server);
BrowseChildren(browser);
}
void BrowseChildren(IOpcDaBrowser browser, string itemId = null, int indent = 0)
{
OpcDaBrowseElement[] elements = browser.GetElements(itemId);
foreach (OpcDaBrowseElement element in elements)
{
Console.Write(new string(' ', indent));
Console.WriteLine(element);
if (!element.HasChildren)
continue;
BrowseChildren(browser, element.ItemId, indent + 2);
}
}
}
}
}
2条答案
按热度按时间4bbkushb1#
如果程序中发生System.AccessViolationException,进程将被终止,try catch无法捕获,有一种方法可以处理,在引发异常的方法中添加[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]属性,try catch可以捕获AccessViolationException异常而不会导致进程终止。
ffx8fchx2#
问题解决了,我所做的就是将构建参数更改为32位,而不是64位,它工作在Project\Build\CPU x86