我正在使用第三方 dll 创建一个 opc 服务器。他们给出了一个示例,其中所有函数都在不同的线程上运行。这是示例,OPCServer.cs:
public static OpcServer CreateInstanceAsync()
{
Thread thread = new Thread(new ParameterizedThreadStart(InitializationThread));
OpcServer opcServer = new OpcServer();
thread.Start(opcServer);
thread.Join();
return opcServer;
}
static void InitializationThread(object arg)
{
((OpcServer)arg).Initialize();
}
void Initialize()
{
//some stuff
}
public void UpdateValues(string[] n)
{
this.BeginUpdate();
value1 = (object[])n;
for (int i = 0; i < tag_count; i++)
{
this.SetTag(tag_ids[i], value1[i], Quality.Good, FileTime.UtcNow);
}
this.EndUpdate(false);
}
我在 UpdateValues() 方法中遇到问题;主要形式:
public Form1()
{
InitializeComponent();
opcServer = OpcServer.CreateInstanceAsync();
opcServer.UpdateValues(valuesInArray);
}
有一个计时器,并且 UpdateValues() 方法将在每次刻度时调用一个新值。间隔为 10 秒。
private void timer1_Tick(object sender, EventArgs e)
{
opcServer.UpdateValues(valuesInArray);
}
该程序运行平稳了一段时间。但在那之后它显示堆栈溢出异常。,有时电脑被绞死。我不明白为什么?我该如何摆脱这个?OPCServer.cs 由第 3 方提供。我的工作是在该特定方法中传递值。每次调用该方法时我都必须创建一个新线程吗?