如何在Silverlight for Windows Phone 8.1中等待异步事件返回 [英] How do I wait for an async event to return in Silverlight for Windows Phone 8.1

查看:61
本文介绍了如何在Silverlight for Windows Phone 8.1中等待异步事件返回的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在以下代码段中,我无法等待已完成的事件触发。 WaitOne似乎永远等待。我需要知道在VB.Net中这样做的正确方法。干杯。



In the following code snippet I am having difficulty waiting for the completed event to fire. The WaitOne seems to just wait forever. I need to know the proper way of doing this in VB.Net. Cheers.

     Private mTable As agDBConnect.Table
    Private autoResetEvent As New System.Threading.AutoResetEvent(False)

    Public Sub GetTableCompleted(sender As Object, e As agDBConnect.GetTableCompletedEventArgs)
        Try
            Me.Dispatcher.BeginInvoke(New Action(Of agDBConnect.Table)(AddressOf FillTable), e.Result)
            autoResetEvent.Set()
        Catch ex As Exception
        End Try
    End Sub

    Private Sub FillTable(aTab As agDBConnect.Table)
        mTable = aTab
    End Sub

    Private Sub DoGetTable()
        AddHandler myagDBConnect.GetTableCompleted, AddressOf GetTableCompleted
        While myagDBConnect.State <> ServiceModel.CommunicationState.Opened
        End While
        myagDBConnect.GetTableAsync("SELECT * from s3USER")
        autoResetEvent.WaitOne()
    End Sub


  
    Private Async Sub btTestData_Click(sender As Object, e As RoutedEventArgs) Handles btTestData.Click
        Try
            Try
                mTable = Nothing
                Dim myThread As System.Threading.Thread = New Thread(AddressOf DoGetTable)
                myThread.Start()
                While myThread.ThreadState = ThreadState.Running

                End While
'>> don't want to be here until gettablecomplete has done
                If mTable IsNot Nothing AndAlso mTable.Rows.Count > 0 Then
                    txtDebug.Text = mTable.Rows(0).Columns(0).FieldName
                End If
            Catch ex As Exception
            End Try
        Catch ex As Exception
            MessageBox.Show(ex.ToString, "System Error", MessageBoxButton.OK)
        End Try

    End Sub

推荐答案



你不需要创建新的线程(除非你知道你在做什么,否则你不应该这样做);也不需要AutoResetEvent并调用Dispatcher.BeginInvoke。



只需使用 Async with Await 如何使用它。

您需要等待异步点击处理程序中的GetTableAsync方法。

查看此文章 https://msdn.microsoft.com/en-us/library/hh191443.aspx [ ^ ]。


这篇关于如何在Silverlight for Windows Phone 8.1中等待异步事件返回的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆