C# 如何在几秒钟后触发事件?

C# 如何在几秒钟后触发事件?,c#,events,methods,timer,C#,Events,Methods,Timer,我正在做一个应用程序,我想登录与人脸检测。但这不是真的,它只是让ik看起来像它的扫描。 所以当我按下“登录”按钮时,kinect会拍摄我的照片并向我展示照片,最上面的是一段文字,显示了它扫描的内容。 现在我遇到了以下问题,当我按下登录按钮时,会出现扫描标签,但我想触发另一个事件,将我带到下一页,主页。 所以我希望扫描标签出现3秒钟,然后页面应该改变。 这是我尝试过的,我用定时器工作,但那不做任何注释 private void ActionButton_Click(object sende

我正在做一个应用程序,我想登录与人脸检测。但这不是真的,它只是让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秒触发一个方法。 我怎样才能让它工作一次

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

将“时间流逝”更改为:

void _tm_Elapsed(object sender, ElapsedEventArgs e)
    {
        if (_tm == (sender as Timer))
        {
            _main.ContentPage.Children.Clear();
            _main.ContentPage.Children.Add(_homeScreen);
        }
    }
编辑答案:
“我只想在3秒后发射1次”


将_tm_时间更改为:

void _tm_Elapsed(object sender, ElapsedEventArgs e)
    {
        if (_tm == (sender as Timer))
        {
            _main.ContentPage.Children.Clear();
            _main.ContentPage.Children.Add(_homeScreen);
        }
    }
编辑答案:
“我只想在3秒后发射1次”


我想你可以取消这个条件

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);

}

当您设置
\u tm=新定时器(3000)时它将设置3秒后触发事件的时间。

我认为您可以删除该条件

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);

}

当您设置
\u tm=新定时器(3000)时它将在3秒后设置触发事件的时间。

这是可行的,但问题是它一直在运行,并且每3秒触发一次_tm_appeased方法。我只想让它在3秒后触发1次。这是可行的,但问题是它一直在继续,每3秒就会触发_tm_appeased方法。我只想让它在3秒后发射一次。我只想让它在3秒后发射一次。每隔3秒它就会继续启动?我的发送器不包含已启用的属性?如果它的
计时器
,它应该具有
已启用的
属性,就像您在
启动
方法中使用的那样<代码>\u tm.Enabled=true尝试将发送器强制转换为计时器..
\u tm.Enabled=false在已用处理程序内不起作用。。as
\u tm
未知。。你必须使用
sender
本身..我这样试过,Timer tm=(Timer)sender;tm.Enabled=false;但它仍然每3秒发射一次,我只想在3秒后发射一次。每隔3秒它就会继续启动?我的发送器不包含已启用的属性?如果它的
计时器
,它应该具有
已启用的
属性,就像您在
启动
方法中使用的那样<代码>\u tm.Enabled=true尝试将发送器强制转换为计时器..
\u tm.Enabled=false在已用处理程序内不起作用。。as
\u tm
未知。。你必须使用
sender
本身..我这样试过,Timer tm=(Timer)sender;tm.Enabled=false;但它仍然每3秒开火一次。