我正在開發一個聊天應用程序。在加載聊天消息並且消息可見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',它的工作完全正常,使用此代碼 –