C# 停止系统。计时器在C中#

C# 停止系统。计时器在C中#,c#,.net,xamarin,.net-core,xamarin.forms,C#,.net,Xamarin,.net Core,Xamarin.forms,我正在使用系统。计时器并且计时器工作正常,例如在第二个4、8、12、16拍摄照片 但是,我想让它在第17秒导航,但它不会 代码 public partial class CustomCameraPage : ContentPage { private static Timer timer_click; int Seconds = 0; public CustomCameraPage() { timer_click = new Timer();

我正在使用
系统。计时器
并且计时器工作正常,例如在
第二个4、8、12、16
拍摄照片

但是,我想让它在第17秒导航,但它不会

代码

public partial class CustomCameraPage : ContentPage
{
    private static Timer timer_click;
    int Seconds = 0;

    public CustomCameraPage()
    {
        timer_click = new Timer();
        timer_click.Interval = 1000;
        timer_click.Elapsed += OnTimedEvent;
        timer_click.Enabled = true;
        timer_click.AutoReset = true;
        timer_click.Start();

        InitializeComponent();
    }
        
    public void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        Seconds++;

        if (Seconds == 4 || Seconds == 8 || Seconds == 12 || Seconds == 16) MessagingCenter.Send<object>(this, "A");
        if (Seconds == 17) Navigation.PushModalAsync(new FormPage());
    }   
}
public分部类CustomCameraPage:ContentPage
{
专用静态计时器\u单击;
整数秒=0;
公共CustomCameraPage()
{
timer_click=新建计时器();
定时器点击间隔=1000;
timer\u click.appeased+=OnTimedEvent;
timer_click.Enabled=true;
timer\u click.AutoReset=true;
定时器_单击.Start();
初始化组件();
}
public void OnTimedEvent(对象源,ElapsedEventArgs e)
{
秒++;
如果(秒==4 | |秒==8 | |秒==12 | |秒==16)MessagingCenter.Send(这是“A”);
if(Seconds==17)Navigation.PushModalAsync(newformpage());
}   
}

在屏幕上执行导航


所以什么都没发生?或者是抛出了一个异常,到底发生了什么?旁注:假设计时器的间隔是精确的,这充其量是幼稚的。您的
Seconds
变量不是计时器启动后经过的秒数的精确表示,而是调用
OnTimedEvent
方法的次数的精确表示。还有一些挑剔:
if(Seconds==4 | | Seconds==8 | | Seconds==12 | | Seconds==16)
可以简化为
如果(秒<17&&Seconds%4==0)
但这只是吹毛求疵…在计时器上调用
Stop()
,并使用Xamarin Essentials中的主线程执行导航是否允许从拥有内容页的线程以外的线程推送导航?我不熟悉Xamarin.Forms在这方面的工作方式。谢谢,它工作了:)但是为什么它会停留1-2秒然后导航呢?
if (Seconds == 17) 
{
  timer_click.Stop();
  MainThread.BeginInvokeOnMainThread(() =>
  {
    Navigation.PushModalAsync(new FormPage());
  });
}