我在我的程序中实现了一个后台工作程序,它正在访问一个在线程外部十分转换的全局变量。 IT不会导致错误,但会设置checkillegalstring属性,并且整个地方都存在交叉线程异常。我发现它是因为它使用了我之前声明过的全局变量。
我似乎找不到任何可以在我的backgroundworker线程中使用全局变量的地方,这可能吗?
答案 0 :(得分:3)
最简单的方法是使用SyncLock
Sub firstNewThread()
SyncLock objLock
'Access global object
End SyncLock
End Sub
Sub secondNewThread()
SyncLock objLock
'Guaranteed to not be executing while block in first thread is running
End SyncLock
End Sub
请注意其他陷阱,例如可能发生的死锁。
答案 1 :(得分:3)
也许您可以尝试使用SyncLock。
请参阅此答案:https://stackoverflow.com/a/915877/153923
例如:
// C#
lock (someLock)
{
list.Add(someItem);
}
// VB
SyncLock someLock
list.Add(someItem)
End SyncLock