//메인 페이지에 진입했을때 발생되는 이벤트 재정의 protected override void OnNavigatedTo(NavigationEventArgs e) { isLoaded = false; base.OnNavigatedTo(e); if (e.NavigationMode == NavigationMode.Back) { if (AppStateUtils.ContainsRecoveryType(RecoveryTypes.Connection)) { ConnectionManager.Instance.ConnectServer( PointingControlManager.Instance.DeviceType, new CallbackHandler((object param) => { CallbackConnectServer(param); //복구 모드 삭제 AppStateUtils.ClearRecoveryTypes(); })); } else { ServerExtraInfo seInfo = (ServerExtraInfo)AppStateUtils.Get(Constant.KEY_SERVER_EXTRA_INFO); if (seInfo != null) { //접속후 돌아온 경우 txtInfomation.Text = I18n.GetString("ServerConnectPageConnecting"); CallbackConnectServer(seInfo); AppStateUtils.Remove(Constant.KEY_SERVER_EXTRA_INFO); } else { if (!ConnectionManager.Instance.IsConnected) { UpdateUIElements(); } else { //접속이 되어 있으면 접속된 정보를 저장 if (SettingManager.Instance.SettingInfo.AutoConnect) { ConnectionManager.Instance.SaveLastConnectedServer(PointingControlManager.Instance.DeviceType); } //버튼 복구 UIUtils.SetVisibility(btnMenu, true); UIUtils.SetVisibility(btnKeyboard, true); } } } } else { isLoaded = true; } }
private void CheckConnectionThreadFn() { int batterySwitch = 1; int checkTime = 5000; //초기 5초 셋팅 while (true) { if (!NetworkUtils.IsNetworkAvailable) { if (ConnectionManager.Instance.IsConnected) { //접속중 WiFi가 연결이 끊긴경우 접속 해제 처리 UpdateConnectionStatus(false); } else if (AppStateUtils.ContainsRecoveryType(RecoveryTypes.Connection)) { //접속중 WiFi가 연결이 끊긴경우 접속 해제 처리 UpdateConnectionStatus(false); AppStateUtils.ClearRecoveryTypes(); } } else { //2. 커넥션 체크 (접속되었을때 체크시작, 접속해지후 체크종료) if (ConnectionManager.Instance.IsConnected) { checkTime = 3000; //체크 간격을 3초로 줄임 //쓰레드 대기 준비 connCheckDone.Reset(); //체크결과 요청 System.Net.Sockets.SocketError socketError = (System.Net.Sockets.SocketError)ConnectionManager.Instance.CheckConnection(SettingManager.Instance.SettingInfo, new CallbackHandler((object param) => { Deployment.Current.Dispatcher.BeginInvoke(() => { //쓰레드 재계 connCheckDone.Set(); if (ConnectionManager.Instance.IsConnected) { ServerExtraInfo serverStatusInfo = param as ServerExtraInfo; if (VersionUtils.IsPresentation) { SetScreenMode(serverStatusInfo.ScreenType); } } else { UpdateDisconnectUI(); if (MessageBox.Show(I18n.GetString("AppMessageDisconnectedFromPC"), I18n.GetString("AppMessageConfirm"), MessageBoxButton.OKCancel) == MessageBoxResult.OK) { NavigationService.Navigate(ResourceUri.ServerListPageUri); } } }); })); //쓰레드 대기 if (!connCheckDone.WaitOne(10000)) { //Deployment.Current.Dispatcher.BeginInvoke(() => // { // MessageBox.Show("타임아웃 발생"); // }); } } else { checkTime = 10000; //체크 간격을 10초로 늘림 } } //위치가 위로가면 블록킹 걸리는 경우가 있는것 같다. Thread.Sleep(checkTime); //배터리는 대략 1 ~ 2분에 한번 체크 if (batterySwitch == 20) { #if !WP7 DeviceInfo.Battery = Windows.Phone.Devices.Power.Battery.GetDefault().RemainingChargePercent; #endif batterySwitch = 1; } else { batterySwitch++; } } }