如何从backgroundworker线程vb.net安全地访问全局变量

时间:2013-07-30 21:10:42

标签: vb.net winforms backgroundworker

我在我的程序中实现了一个后台工作程序,它正在访问一个在线程外部十分转换的全局变量。 IT不会导致错误,但会设置checkillegalstring属性,并且整个地方都存在交叉线程异常。我发现它是因为它使用了我之前声明过的全局变量。

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

2 个答案:

答案 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