2012-01-02 4 views
1

Я делаю приложение, где я хотел бы войти в систему с обнаружением лица. Но это не реально, его просто сделать ik похожим на его сканирование. Итак, когда я нажимаю кнопку LOG IN, kinect берет мое изображение и показывает мне картинку, поверх нее отображается текст в тексте, который он просматривает. Теперь я застрял в следующей проблеме, когда я нажимаю кнопку входа в систему, появляется метка сканирования, но я хотел бы запустить другое событие, которое приведет меня к следующей странице, на главной странице. Итак, я хочу, чтобы на экране появилась метка SCANNING в течение 3 секунд, а затем страница должна измениться. Это то, что я пытался, я работал с таймером, но это не делает annything.Как запустить событие через несколько секунд?

private void ActionButton_Click(object sender, System.EventArgs eventArgs) 
    { 

     _main.TakePicture(); 
     identifyBox.Source = _main.source.Clone(); 
     scanningLabel.Visibility = Visibility.Visible; 
     _storyboard = (Storyboard)FindResource("scanningSB"); 
     //_storyboard.Begin(); 
     Start(); 
    } 

    private void Start() 
    { 
     _tm = new Timer(3000); 
     _tm.Elapsed += new ElapsedEventHandler(_tm_Elapsed); 
     _tm.Enabled = true; 
    } 

    void _tm_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     if (_tm == new Timer(3000)) 
     { 
      ((Timer)sender).Enabled = false; 
      _main.ContentPage.Children.Clear(); 
      _main.ContentPage.Children.Add(_homeScreen); 
     } 
    } 

Хорошо, я удалил оператор if, но теперь он срабатывает каждые 3 секунды. Как я могу заставить его работать 1 раз.

Хорошо, даже это работает, теперь я не могу изменить свою ContentPage? Это дает мне эту ошибку: вызывающий поток не может получить доступ к этому объекту, потому что ему принадлежит другой поток. Что может быть неправильным?

ответ

5

Я думаю, что вы можете удалить условие

if (_tm == new Timer(3000)) 

и держать его простым

void _tm_Elapsed(object sender, ElapsedEventArgs e) 
{ 

    ((Timer)sender).Enabled = false; 

    _main.ContentPage.Children.Clear(); 
    _main.ContentPage.Children.Add(_homeScreen); 

} 

при установке _tm = new Timer(3000); будет установить время, чтобы огонь событие через 3 секунды ..

+0

Я просто хочу 1 раз стрелять через 3 секунды. Каждые 3 секунды он продолжает стрелять? – Letoir

+0

@Letoir: обновлен ответ .. надеюсь, что это будет полезно для вас .. – dotNETbeginner

+0

мой отправитель не содержит свойство Enabled? – Letoir

2

Изменение _tm_Elapse к этому:

void _tm_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     if (_tm == (sender as Timer)) 
     { 
      _main.ContentPage.Children.Clear(); 
      _main.ContentPage.Children.Add(_homeScreen); 
     } 
    } 

Редактировать для ответа: "Я просто хочу его 1 раз стрелять через 3 сек"

void _tm_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     if (_tm == (sender as Timer)) 
     { 
      _tm.Stop(); 
      _main.ContentPage.Children.Clear(); 
      _main.ContentPage.Children.Add(_homeScreen); 
     } 
    } 
+0

Это работает, но проблема в том, что она продолжает идти, и через каждые 3 секунды он запускает метод _tm_Elapsed. Я просто хочу, чтобы 1 раз стрелял через 3 секунды. – Letoir

+0

см. Редактирование. – Lucian

+0

thx, но doenst произведение? – Letoir

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