Wpf 代码中断-It';这是因为线的缘故 这是密码,

Wpf 代码中断-It';这是因为线的缘故 这是密码,,wpf,vb.net,multithreading,visual-studio,Wpf,Vb.net,Multithreading,Visual Studio,我想等待执行GetData()-这会出现错误,表示“调用线程无法访问此对象,因为其他线程拥有它” 尝试将此设置为同步功能-仍然无法工作 或者延迟200毫秒 Public Async Sub GetData(uid As String) dim data as ArrayList = await MemberService.GetMember(UID) BorrowedList.ItemsSource = new List(Of book) (await BookService.GetBo

我想等待执行GetData()-这会出现错误,表示“调用线程无法访问此对象,因为其他线程拥有它”

尝试将此设置为同步功能-仍然无法工作

  • 或者延迟200毫秒

     Public Async Sub GetData(uid As String)
    dim data as ArrayList = await MemberService.GetMember(UID)
    BorrowedList.ItemsSource = new List(Of book) (await BookService.GetBooksBorrowed(UID))
    LblUID.Content = UID
    LblName.Content = data(0) + "" + data(1)
    LblPhone.Content = data(2)
    LblDepartment.Content = data(3)
    LblSemester.Content = data(4)
    _dashBoard.MemberPopup.Content = Me
    _dashBoard.MemberPopupDialog.IsOpen = True
    End Sub
    
这是电话

 Private Async Sub QrScanned(jsonString As String)
    My.Computer.Audio.Play(My.Resources.ScannerBeep, AudioPlayMode.Background)
    Try
        If jsonString.Contains("UID") Then
            if Await CheckBookInList 'Checks and returns book if found
                GetData("MEM-0001")
                await Task.Delay(200)
                _sendImage.Start()
            ElseIf await BookService.Borrowed("BOOK-2","MEM-0001") 
                    GetData("MEM-0001")
                await task.Delay(200)
                _sendImage.Start()
            Else 
                MsgBox("Failed to Update database")
            End If
        else
            MsgBox("Please scan a book to add or return")
        End If
    Catch ex As Exception
        msgbox(ex.ToString())
    End Try


End Sub

当我试图与其他服务器进行UI therad时,错误被弹出;这是不可能的,因为WPF在STA[单线程单元]上运行。 为了解决这个问题,我必须通过调用Dispatcher.invoke从另一个线程调用UI线程

更正后的代码为:
   Public Async Sub GetData(uid As String)
    dim data as ArrayList = await MemberService.GetMember(UID)
    Dim x = new List(Of book) (await BookService.GetBooksBorrowed(UID))
    Me.Dispatcher.invoke(Sub()
             BorrowedList.ItemSource = x
             LblUID.Content = UID
             LblName.Content = data(0) + "" + data(1)
             LblPhone.Content = data(2)
             LblDepartment.Content = data(3)
             LblSemester.Content = data(4)
             _dashBoard.MemberPopup.Content = Me
             _dashBoard.MemberPopupDialog.IsOpen = True
         End Sub)  
End Sub

您需要查看
调度程序。调用
,它将是您所需要的。错误是特定的,不要通过尝试更新来访问您不拥有的线程…代码忘记等待GetData()如何修复它@HansPassant
   Public Async Sub GetData(uid As String)
    dim data as ArrayList = await MemberService.GetMember(UID)
    Dim x = new List(Of book) (await BookService.GetBooksBorrowed(UID))
    Me.Dispatcher.invoke(Sub()
             BorrowedList.ItemSource = x
             LblUID.Content = UID
             LblName.Content = data(0) + "" + data(1)
             LblPhone.Content = data(2)
             LblDepartment.Content = data(3)
             LblSemester.Content = data(4)
             _dashBoard.MemberPopup.Content = Me
             _dashBoard.MemberPopupDialog.IsOpen = True
         End Sub)  
End Sub