2017-01-15 23 views
1

Я работаю над школьным проектом с окнами iot C# development sdk, все работает отлично до сих пор, но теперь у меня есть два события, которые нужно запускать через 3 секунды и 7 секунд. Но я не могу заставить его работать, я уже ломаю голову над этим в течение последних двух дней, но все, что я пытаюсь, похоже, дает мне еще большую головную боль. Поэтому я надеюсь, что вы, ребята, можете мне помочь.Dispatchtimer между кнопками

В основном моя программа ждет нажатия кнопок и после отпускания кнопки мне нужно запустить таймер, но когда кнопка нажата, таймер должен быть остановлен до тех пор, пока кнопка не будет отпущена. Здесь вы можете найти мое событие btn_changed. Не допускайте, чтобы секундомер, встроенный в это событие для таймера, который мне нужен, секундомер имеет другую цель.

Привет, Йерун

 private void BtnPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e) 
    { 
     if (e.Edge == GpioPinEdge.FallingEdge) //Execute code when button is pushed down 
     { 
      stopwatch.Restart(); 
      Debug.WriteLine("Button down"); 
     } else // Execute code when button is released 
     { 
      stopwatch.Stop(); 
      if (stopwatch.ElapsedMilliseconds <= 5000) 
      { 
       morsemessage.AddMorse(stopwatch.ElapsedMilliseconds); //Add the new letter 
      } 
      else if (stopwatch.ElapsedMilliseconds > 5000) 
      { 
       morsemessage.AddCharacter(); 
       lcd_writestring(morsemessage.GetDecryptedMessage()); 
      } 
      Debug.WriteLine(morsemessage.currentCharacter); 
      Debug.WriteLine(stopwatch.ElapsedMilliseconds); 
      Debug.WriteLine(morsemessage.Message); 
      Debug.WriteLine(morsemessage.GetDecryptedMessage()); 
      dispatcherTimer.Start(); 
     }   
+0

Можете ли вы обнаружить событие, изменившее границу, когда вы нажали кнопку и отпустили кнопку? –

ответ

0

Я не ясно, о том, какие конкретные проблемы вы столкнулись, но следующий фрагмент кода работает для меня. Вы можете попробовать.

CoreDispatcher dispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher; 
    private void InitTimer() 
    { 
     dispatchTimer = new DispatcherTimer(); 
     dispatchTimer.Interval = new TimeSpan(0, 0, 1); 
     dispatchTimer.Tick += (object sender, object e) => 
     { 
      Debug.WriteLine("Timer tick."); 
     }; 
     dispatchTimer.Start(); 
    } 

    private void InitGpio() 
    { 
     button = GpioController.GetDefault().OpenPin(4); 
     button.DebounceTimeout = new TimeSpan(0, 0, 0, 0, 200); 
     button.ValueChanged += BtnPin_ValueChanged; 
    } 

    private async void BtnPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e) 
    { 
     if (e.Edge == GpioPinEdge.FallingEdge) 
     { 
      Debug.WriteLine("Button pressed"); 
      await dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
      { 
       dispatchTimer.Stop(); 
      } 
      ); 
     } 
     else 
     { 
      Debug.WriteLine("Button released"); 
      await dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
      { 
       dispatchTimer.Start(); 
      } 
      ); 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^