【问题标题】:DispatcherTimer.Tick is not supported in Xamarin FormsXamarin 表单中不支持 DispatcherTimer.Tick
【发布时间】:2022-01-23 17:57:48
【问题描述】:

我应该如何解决这个问题?

建议的替代方案也不起作用。

错误 CS1545 语言不支持属性、索引器或事件“DispatcherTimer.Tick”;尝试直接调用访问器方法 'DispatcherTimer.add_Tick(EventHandler)' 或 'DispatcherTimer.remove_Tick(EventRegistrationToken)'

_timer = new DispatcherTimer();
_timer.Tick += Timer_Tick;
_timer.Interval = new TimeSpan(0, 0, 1);

【问题讨论】:

  • 我们看不到 Timer_Tick,这可能不是正确的方法。
  • 我认为它适用于 WPF
  • 我不认为 Xamarin Forms 支持 WPF 的 DispatcherTimer 控件。以下是在 Xamarin Forms 中创建计时器的方法:stackoverflow.com/q/37203371/87698
  • 很遗憾,建议的 Device.StartTimer 类无法被 IntelliSense 识别。
  • 根据quote,System.Timers 中的内置 .net 计时器运行良好。但我还要评论 Device.StartTimer 在namespace Xamarin.Forms 中。在您输入Device. 后,如果您等待,Intellisense 应该添加红色下划线,并为您提供灯泡(或者可能是一个下拉菜单),可选择using Xamarin.Forms; 或完全指定为Xamarin.Forms.Device

标签: c# xamarin.forms uwp


【解决方案1】:

Windows.UI.Xaml DispatcherTimer 仅适用于 WinRT,System.Windows.Threading DispatcherTimer 仅适用于 .NET Framework。所以我们不能把它们都用成表格。如需在 Xamarin 表单中使用计时器,请使用 Device.StartTimer 替换。

Device.StartTimer (new TimeSpan (0, 0, 60), () =>
{
    // do something every 60 seconds
    Device.BeginInvokeOnMainThread (() => 
    {
      // interact with UI elements
    });
    return true; // runs again, or false to stop
});

【讨论】:

  • 好的,但我希望每 600 毫秒与 UI 交互一次,而不是每 60 秒一次。而且它没有让我有机会直接将 0.6 秒写为第三个参数的值。
  • new TimeSpan(0, 0, 0, 600)TimeSpan.FromMilliseconds(600) 使用此替换上述时间跨度。
  • 我刚刚在 App.xaml.cs 内的 App() 构造函数中插入了 Device.StartTimer 代码 sn-p。我还在 App 类中创建了一个私有布尔变量 _shouldTimerRun '已经替换 return true;返回 _shouldTimerRun;通过设置 bool 变量值,有一个事件可用于启动或停止计时器。为了使计时器完全正常工作,我还应该做些什么吗?
  • 推荐使用私有布尔变量 _shouldTimerRun 来停止计时器。 StartTimer 没有提供其他条目来管理计时器。
  • 我刚刚将答案标记为已接受。非常感谢您的反馈! :)
猜你喜欢
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 2022-06-14
  • 2014-07-23
  • 2020-03-20
  • 2019-11-26
  • 2018-02-17
  • 1970-01-01
相关资源
最近更新 更多