我正在开发一个聊天应用程序。在加载聊天消息并且消息可见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()',不应该在一个窗体项目中使用。只需使用'Device.StartTimer()'。 – BrewMate
@BrewMate为什么不应该在Forms项目中使用它?我没有使用'System.Threading.Timer',它的工作完全正常,使用此代码 –