所以我有一個按下按鈕的應用程序:啟動一個計時器,循環瀏覽一個(++)數據并隱藏開始按鈕,而是顯示一個停止和下一步按鈕。我查看了消息中心,我認為它正在解決問題(這里是鏈接Xamarin.Forms 如何從另一個 CS 文件訪問公共函數?)但它并沒有完全解決問題。如果應用程序的計時器正在運行(也就是你點擊了開始按鈕),然后通過點擊手機上的主頁按鈕來中斷進程,則應用程序運行正常,應用程序隱藏停止/下一步按鈕并顯示開始按鈕并停止計時器。如果您根本沒有開始該過程(也就是您沒有點擊開始按鈕)并且您點擊了手機上的主頁按鈕,則應用程序會引發異常錯誤,因為我正在使用消息中心進行更改“不需要改變,因為它從未改變”。有沒有更好的方法來處理這種情況?我可以在消息中心的應用狀態下使用 if/else 語句嗎?我被困住了。應用程序.xaml.csprotected override void OnSleep() { // Handle when your app sleeps Debug.WriteLine("~~~~~~~~~~~~~~OnSleep~~~~~~~~~~~~~"); MessagingCenter.Send<App>(this, "OnSleep"); }MainPage.xaml.csMessagingCenter.Subscribe<App>(this, "OnSleep", (sender) => { //shows start button instead of stop button StartGrid.IsVisible = true; //hides stop button StopNextGrid.IsVisible = false; //stops timer timer.Stop(); timer = null; //stops sound startSound.Stop(); stopSound.Play(); });
1 回答
慕的地10843
TA貢獻1785條經驗 獲得超8個贊
只能看到部分代碼,您應該在執行該方法之前檢查您的計時器是否已初始化。
當不點擊開始按鈕時,需要檢查是否timer已初始化,以便進行下面的定時器操作。
如果不想知道定時器是否被初始化。你可以試試這個:
在你的通知處理方法中修改。如果你的定時器和按鈕的狀態沒有改變,你不需要在通知中做任何事情。這里我用 來timer作為判斷。
MessagingCenter.Subscribe<App>(this, "OnSleep", (sender) => {
//shows start button instead of stop button
if (null != timer)
{
StartGrid.IsVisible = true;
//hides stop button
StopNextGrid.IsVisible = false;
//stops timer
timer.Stop();
timer = null;
//stops sound
startSound.Stop();
stopSound.Play();
}
});
- 1 回答
- 0 關注
- 161 瀏覽
添加回答
舉報
0/150
提交
取消
