几秒钟后我如何开火?

时间:2012-01-02 08:45:13

标签: c# events methods timer

我正在创建一个我希望使用面部检测登录的应用程序。但这不是真的,它只是让ik看起来像它的扫描。 因此,当我按下LOG IN按钮时,kinect拍摄我的照片并向我显示照片,在它上方显示我正在扫描的文本。 现在我遇到了以下问题,当我按下登录按钮时,会出现扫描标签,但我想触发另一个将我带到下一页主页的事件。 所以我希望SCANNING标签出现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秒触发一个方法。 我怎样才能让它工作一次。

好吧即使这样也行,现在我的ContentPage不会改变?它给了我这个错误:调用线程无法访问此对象,因为另一个线程拥有它。 什么可能是错的?

2 个答案:

答案 0 :(得分: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秒后触发事件的时间..

答案 1 :(得分:2)

将_tm_Elapse更改为:

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

编辑回答: “我只想在3秒后发射一次”

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