Wpf 代码中断-It';这是因为线的缘故 这是密码,
我想等待执行GetData()-这会出现错误,表示“调用线程无法访问此对象,因为其他线程拥有它” 尝试将此设置为同步功能-仍然无法工作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
- 或者延迟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