Visual Basic .NET使用Async / Await执行线程安全的调用

示例

如果尝试从其他线程更改UI线程上的对象,则会得到跨线程操作异常:

Private Sub Button_Click(sender As Object, e As EventArgs) Handles MyButton.Click

    ' Cross thread-operation exception as the assignment is executed on a different thread

    ' from the UI one:

    Task.Run(Sub()MyButton.Text= Thread.CurrentThread.ManagedThreadId)

End Sub

在VB 14.0和.NET 4.5之前,该解决方案是在UI线程上调用赋值和对象:

Private Sub Button_Click(sender As Object, e As EventArgs) Handles MyButton.Click

    ' This will run the conde on the UI thread:

    MyButton.Invoke(Sub()MyButton.Text= Thread.CurrentThread.ManagedThreadId)

End Sub

在VB 14.0中,我们可以Task在其他线程上运行,然后在执行完成后恢复上下文,然后使用Async / Await执行分配:

Private Async Sub Button_Click(sender As Object, e As EventArgs) Handles MyButton.Click

    ' This will run the code on a different thread then the context is restored

    ' so the assignment happens on the UI thread:

   MyButton.Text= Await Task.Run(Function() Thread.CurrentThread.ManagedThreadId)

End Sub

           

以上是 Visual Basic .NET使用Async / Await执行线程安全的调用 的全部内容, 来源链接: utcz.com/z/321334.html

回到顶部