Windows Phone 8.1上的DoEvents()

时间:2014-09-11 12:48:02

标签: .net vb.net windows-phone-7 windows-phone-8

我将VB .NET桌面代码转换为在Windows Phone 8.1上运行。 在我的MainPage.xml.vb中,我通过文字转语音引擎向用户呈现音频菜单。

读取1个菜单项后(),我需要给用户一定的时间做出反应。在我的桌面应用程序中,我能够使用这样的东西:

Sub PresentMenuItem(mi as MyMenuItem)
  TTS.Speak(mi.Text)
  TimeoutTimer.Interval = 2000 'ms
  TimeoutTimer.Start()
  Do While TimeoutTimer.IsEnabled = true
    Application.DoEvents()
  Loop
End Sub

在Windows手机上没有DoEvents(),也似乎没有干净的编程。有什么样的可能性来解决这个问题?请帮助,谢谢。

EDIT1

更具体我想做什么: 我有一个字符串列表,我想通过文本到语音读取给用户。在读取字符串[i.name]之后,如果在显示器上绘制手势,它将查找1.5秒。如果绘制,则等待进程停止,因为用户进行了选择。如果1.5秒后没有画出手势,等待过程也会停止。 我能够接收在触摸屏上绘制的手势,但我完全停留在如何正确地进行等待过程。

Partial Public Class MainPage
    Inherits PhoneApplicationPage

    Friend Class MenuPage
        Friend Overrides Async Sub Provide() 
            Dim items = PageItems.Where(Function(c) c.Level = "1")
            Dim GIR As New GestureInputReceiver()

            For Each i In items
                Await TTS.Speak(i.Name)
                GIR.HookGestures(1500)

                'HERE i want to the app to have waited 1.5 seconds
                'and then be able to know the received Gesture, like:
                'Select Case GIR.LastGesture
                '  Case 0
                '    DoWhatever()
                'End Select
            Next
        End Sub
    End Class

    Friend Class GestureInputReceiver
        Dim WithEvents TimeoutTimer As New DispatcherTimer()
        Dim WithEvents GestureCheckerTimer As New DispatcherTimer()

        Public Sub New()
            GestureCheckerTimer.Interval = New TimeSpan(0, 0, 0, 0, 100)
        End Sub

        Friend Sub HookGestures(ms As Integer)
            TimeoutTimer.Interval = New TimeSpan(0, 0, 0, 0, ms)
            TimeoutTimer.Start()
            GestureCheckerTimer.Start()
        End Sub

        Private Sub TimeoutTimer_Tick(sender As Object, e As EventArgs) Handles TimeoutTimer.Tick
            If TimeoutTimer.IsEnabled = True Then
                GestureCheckerTimer.Stop()
                TimeoutTimer.Stop()
            End If
        End Sub

        Private Sub GestureCheckerTimer_Tick(sender As Object, e As EventArgs) Handles GestureCheckerTimer.Tick
            'if GestureReceived() = True Then ExitBothTimers() + SetLastGesture()
        End Sub
End Class

任何帮助表示赞赏!感谢。

0 个答案:

没有答案