signalr 方法未在 onSleep 事件 xamarin.forms 中触发

问题描述 投票:0回答:1

我正在尝试实现一种方法来检测用户的在线或离线状态。所以我在 xamarin.forms 中使用了生命周期事件。当应用程序转到后台时,我将在线标志设置为 false,然后使用信号集线器方法发送它:

 async  protected override void OnSleep()
        {
                online = false;
                
                if (!string.IsNullOrEmpty(Preferences.Get("userid", "")) && !string.IsNullOrEmpty(Preferences.Get("permission", "")))
                {
                    if (Preferences.Get("permission", "") == "Student")
                    {
                        try
                        {
                             await SendMessage(Preferences.Get("userid", ""), false);
                        }
                        catch (Exception exp)
                        {
                            MessagingCenter.Send(this, App.UpdateStatusErrorMessage, exp.Message);
                        }

                    
                        await updateuserstatus(Preferences.Get("userid", ""));

                    }
                    
                }
       
        }

但除非应用程序第二次或第三次进入后台,否则不会触发它。我尝试添加

Task.Delay(500)
然后调用
base.OnSleep()
但没有任何效果。有什么建议么?预先感谢

xamarin.forms asp.net-core-signalr application-lifecycle
1个回答
0
投票

由于您希望在用户离开页面时更新您的状态,因此 Page.OnDisappearing Method 可能更合适。

protected override async void OnDisappearing()
{
    base.OnDisappearing();
    
    online = false;
    
    if (!string.IsNullOrEmpty(Preferences.Get("userid", "")) && !string.IsNullOrEmpty(Preferences.Get("permission", "")))
    {
        if (Preferences.Get("permission", "") == "Student")
        {
            try
            {
                await SendMessage(Preferences.Get("userid", ""), false);
            }
            catch (Exception exp)
            {
                MessagingCenter.Send(this, App.UpdateStatusErrorMessage, exp.Message);
            }
            
            await updateuserstatus(Preferences.Get("userid", ""));
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.