C# Xamarin - 如何延迟第二个 void
Posted
技术标签:
【中文标题】C# Xamarin - 如何延迟第二个 void【英文标题】:C# Xamarin - How to delay second void 【发布时间】:2021-11-27 22:13:39 【问题描述】:我尝试了许多教程,但没有找到可行的解决方案。 所以我想用 3x voids 开始我的应用程序。第一个 void 是 Popup,它实现了 Timer 并在 5 秒后消失。然后我有第二个计时器,它应该在第一个计时器之后启动。所以我决定将我的第二次无效延迟 5 秒,或者有没有其他方法可以解决它?
我的第一个计时器是来自不同 xaml 页面的弹出窗口。
无论如何,我有一个计时器可以立即随应用程序启动,我希望第二个计时器在第一个计时器结束后启动。我该如何实现呢?
这是我的代码:
public quick_math()
InitializeComponent();
NavigationPage.SetHasNavigationBar(this, false);
ReadyCheck(); // this is 1st Timer (5 seconds)
Execute(); // this is my program (not needed to add code of this)
Timer_02(); // second timer (should start after 1st one with delay 5 sec)
public void ReadyCheck()
Navigation.ShowPopup(new Game_Assets.ReadyCheck_popup()
IsLightDismissEnabled = false
) ;
public void Timer_02()
NavigationPage.SetHasNavigationBar(this, false);
BindingContext = this;
Minimum = 0;
Maximum = 45;
ProgressValue = 45;
timerRunning = true;
time.Start();
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
if (ProgressValue > Minimum)
ProgressValue--;
return true;
else if (ProgressValue == Minimum)
time.Stop();
timerRunning = false;
//PerformOperationHere logic operation here.
return false;
else
return true;
);
任何知识都会对我有用,我很感激。
@编辑 (我知道这不是最好的主意,但目前有效)
public async Task ReadyCheck() // timer 5 sec
int before = 0;
if(before == 0)
Navigation.ShowPopup(new Game_Assets.ReadyCheck_popup()
IsLightDismissEnabled = false
);
before++;
if(before != 0)
await Task.Delay(5000); // delay for second timer
Timer_02();
Execute();
【问题讨论】:
你可以让你的函数async
和使用ContinueWith()
。
它真的对我不起作用,或者我做错了什么。有什么帮助吗?有任何想法吗?我今天花了大约 5 个小时阅读 await + async,但仍然没有找到解决我的问题的方法。
好的,我会用一个例子发布一个答案。
【参考方案1】:
为此,请使用async
和ContinueWith()
:
Class "Functions"
public async Task Function1()
//do something
public async Task Function2()
//do something
public async Task Function3()
//do something
Class "Main"
public async void CallTheFunctionsInOrder()
Functions func = new Functions();
func.Function1().ContinueWith(antecedent => func.Function2()).ContinueWith(antecedent => func.Function3());
你的函数实际上不需要异步,它可以是同步的,但是async
让你使用ContinueWith()
。使用这种方式:
Function1()
将处理。
当你的Function1()
结束时,它会继续Function2()
,但是,你的Function1()
需要结束,这就是它调用antecedent
的原因。
Function3()
的处理相同。
【讨论】:
有了这个我有“编译器错误 CS0023”。我不能使用运算符“。”无效类型。 Function1().ContinueWith - 对于 void 类型,您不能使用运算符“.” 操作,我的错,我很困惑。我编辑了我的问题。它是Task
而不是 void
。你的调用函数的类可以是void, Task, bool
,不管怎样。
这些功能不适用于我的程序。他们正在破坏我的整个程序,但我确信我将来会使用它,所以感谢您的时间和帮助。此刻,我编辑了我的问题,以便您了解我做了什么(我知道这不是一个好主意 xd)。以上是关于C# Xamarin - 如何延迟第二个 void的主要内容,如果未能解决你的问题,请参考以下文章
如何加载存在于 Xamarin.iOS 中的共享库项目中的第二个 Storyboard