tes*_*ing 5 c# timer xamarin.ios ios xamarin
我有这个Timer:
Timer delayTimer = new Timer();
delayTimer.Interval = 500;
delayTimer.Elapsed += (object sender, ElapsedEventArgs e) => {
Console.WriteLine("test");
textInputDialog.Show();
delayTimer.Stop();
};
delayTimer.Start();
Run Code Online (Sandbox Code Playgroud)
这里我有以下问题:
textInputDialog.Show(); 不起作用(可能导致上述问题)我的代码出了什么问题?
替代方案:
正如Jens Horstmann所说,这是计时器的替代品.这是在UI线程上调用的:
private async Task SendWithDelay()
{
await Task.Delay(500);
textInputDialog.Show();
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是NSTimer:
NSTimer.CreateScheduledTimer(new TimeSpan(0,0,0,0,500), delegate {
textInputDialog.Show();
});
Run Code Online (Sandbox Code Playgroud)
要调用UI线程上的调用,您可以使用InvokeOnMainThread:
Timer delayTimer = new Timer();
delayTimer.Interval = 500;
delayTimer.Elapsed += (object sender, ElapsedEventArgs e) => {
delayTimer.Stop();
Console.WriteLine("test");
InvokeOnMainThread (() => {
textInputDialog.Show();
});
};
delayTimer.Start();
Run Code Online (Sandbox Code Playgroud)
在显示对话框之前停止计时器:
delayTimer.Elapsed += (object sender, ElapsedEventArgs e) => {
delayTimer.Stop();
Console.WriteLine("test");
textInputDialog.Show();
};
Run Code Online (Sandbox Code Playgroud)
另外,您可能使用了错误的计时器。不要使用System.Threading.Timeror,System.Timers因为这涉及到多线程,它不能很好地与 winforms 或 WPF 配合使用。(这可能是您的 MessageBox 不显示的原因 - 它在错误的线程上调用)
在 WPF 中你应该使用System.Windows.Threading.DispatcherTimer
编辑
在 Winforms 中你应该使用System.Windows.Forms.Timer(见评论)
| 归档时间: |
|
| 查看次数: |
6618 次 |
| 最近记录: |