如何从后台工作线程vb.net安全地访问全局变量



我的程序中实现了一个后台工作者,它正在访问线程外标记的全局变量。它不会导致任何错误,但设置了checkillegalstring属性,并且到处都是跨线程异常。我发现这是因为它使用了我之前声明的全局变量。

我似乎找不到任何地方可以在我的backgroundworker线程中使用全局变量,这可能吗?

最简单的方法是使用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

只需注意其他陷阱,如由此可能发生的死锁。

也许您可以尝试SyncLock。

请参阅以下答案:https://stackoverflow.com/a/915877/153923

例如:

// C#
lock (someLock)
{
    list.Add(someItem);
}
// VB
SyncLock someLock
    list.Add(someItem)
End SyncLock

相关内容

最新更新