Как мне запустить событие через несколько секунд? - PullRequest
1 голос
/ 02 января 2012

Я делаю приложение, в котором я хотел бы войти с распознаванием лиц. Но это не реально, просто чтобы ik выглядел как его сканирование. Поэтому, когда я нажимаю кнопку «ВХОД», kinect берет мое изображение и показывает мне изображение, а поверх него показывает текст, который сканирует. Теперь я застрял со следующей проблемой, когда я нажимаю кнопку входа в систему, появляется метка сканирования, но я хотел бы запустить другое событие, которое переносит меня на следующую страницу, домашнюю страницу. Поэтому я хочу, чтобы ярлык СКАНИРОВАНИЯ появлялся на 3 секунды, а затем страница должна измениться. Это то, что я пытался, я работал с таймером, но это ничего не делает.

    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? Это дает мне эту ошибку: вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет им. Что может быть не так?

Ответы [ 2 ]

5 голосов
/ 02 января 2012

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

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 секунды.

2 голосов
/ 02 января 2012

Измените _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);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...