我正在开发一款聊天应用程序。当聊天消息被加载并可见5秒后,我希望发送一个已读确认到服务器。以下是我目前的想法:
public async void RefreshLocalData()
{
// some async code to load the messages
if (_selectedChat.countNewMessages > 0)
{
Device.StartTimer(TimeSpan.FromSeconds(5), SendReadConfirmation);
}
}
当调用
RefreshLocalData()
时,我知道用户选择了另一个聊天或当前聊天有新消息。因此,当调用RefreshLocalData()
时,我必须取消当前计时器并启动一个新计时器。我必须取消计时器的另一种情况是当我导航到另一个
Page
时。这没有问题,因为整个ViewModel
在发生这种情况时被释放。通过以上代码,如果
RefreshLocalData()
再次被调用但已经过去的5秒TimeSpan
还没有结束,那么该方法仍然会执行。是否有一种方式可以取消计时器(如果再次调用
RefreshLocalData()
)?
System.Threading.Timer
,而不是Xamarin.Forms.Device.StartTimer()
,因此不应在 Forms 项目中使用。只需使用Device.StartTimer()
即可。 - BrewMateSystem.Threading.Timer
,但是使用这段代码完全没有问题。 - Dennis Schröer