void SleepDialog(object obj) { UInt16 param = (UInt16)obj; Byte reboot = (Byte)((param & 0xFF00) >> 8); Byte suspendMode = (Byte)(param & 0x00FF); Int32 sleepmin = (Int32)IniFileHandler.GetPrivateProfileInt("SET", "RecMarginTime", 0, SettingPath.TimerSrvIniPath); sleepmin = sleepmin * 60000; Thread.Sleep(sleepmin); Dispatcher.BeginInvoke(new Action(() => { SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(0, suspendMode); if (dlg.ShowDialog() != true) { cmd.SendSuspend(param); } })); }
private int OutsideCmdCallback(object pParam, CMD_STREAM pCmdParam, ref CMD_STREAM pResParam) { System.Diagnostics.Trace.WriteLine((CtrlCmd)pCmdParam.uiParam); switch ((CtrlCmd)pCmdParam.uiParam) { case CtrlCmd.CMD_TIMER_GUI_SHOW_DLG: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; this.Visibility = System.Windows.Visibility.Visible; } break; case CtrlCmd.CMD_TIMER_GUI_UPDATE_RESERVE: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; if (Dispatcher.CheckAccess() == true) { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); reserveView.UpdateReserveData(); epgView.UpdateReserveData(); tunerReserveView.UpdateReserveData(); autoAddView.UpdateAutoAddInfo(); recInfoView.UpdateInfo(); CommonManager.Instance.DB.ReloadReserveInfo(); ReserveData item = new ReserveData(); if (CommonManager.Instance.DB.GetNextReserve(ref item) == true) { String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ "); DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond); timeView += endTime.ToString("HH:mm:ss"); taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title; } else { taskTray.Text = "次の予約なし"; } } else { Dispatcher.BeginInvoke(new Action(() => { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); reserveView.UpdateReserveData(); epgView.UpdateReserveData(); tunerReserveView.UpdateReserveData(); autoAddView.UpdateAutoAddInfo(); recInfoView.UpdateInfo(); CommonManager.Instance.DB.ReloadReserveInfo(); ReserveData item = new ReserveData(); if (CommonManager.Instance.DB.GetNextReserve(ref item) == true) { String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ "); DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond); timeView += endTime.ToString("HH:mm:ss"); taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title; } else { taskTray.Text = "次の予約なし"; } })); } } break; case CtrlCmd.CMD_TIMER_GUI_UPDATE_EPGDATA: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; if (Dispatcher.CheckAccess() == true) { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); epgView.UpdateEpgData(); } else { Dispatcher.BeginInvoke(new Action(() => { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); epgView.UpdateEpgData(); })); } } break; case CtrlCmd.CMD_TIMER_GUI_VIEW_EXECUTE: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; String exeCmd = ""; CmdStreamUtil.ReadStreamData(ref exeCmd, pCmdParam); try { string[] cmd = exeCmd.Split('\"'); System.Diagnostics.Process process; if (cmd.Length >= 3) { process = System.Diagnostics.Process.Start(cmd[1], cmd[2]); } else if (cmd.Length >= 2) { process = System.Diagnostics.Process.Start(cmd[1]); } else { process = System.Diagnostics.Process.Start(cmd[0]); } CmdStreamUtil.CreateStreamData(process.Id, ref pResParam); } catch { } } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_SUSPEND: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; CmdStreamUtil.ReadStreamData(ref param, pCmdParam); ///////////////////////////////////////////紅//////////////////////////////////// ParameterizedThreadStart ts = new ParameterizedThreadStart(SuspendThread); Thread thread = new Thread(ts); thread.Start(param); ///////////////////////////////////////////////////////////////////////////////////// /*Byte reboot = (Byte)((param & 0xFF00) >> 8); Byte suspendMode = (Byte)(param & 0x00FF); Dispatcher.BeginInvoke(new Action(() => { SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(0, suspendMode); if (dlg.ShowDialog() != true) { cmd.SendSuspend(param); } }));*/ } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_REBOOT: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; CmdStreamUtil.ReadStreamData(ref param, pCmdParam); Byte reboot = (Byte)((param & 0xFF00) >> 8); Byte suspendMode = (Byte)(param & 0x00FF); Dispatcher.BeginInvoke(new Action(() => { SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(reboot, suspendMode); if (dlg.ShowDialog() != true) { cmd.SendReboot(); } })); } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_CHG: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 status = 0; CmdStreamUtil.ReadStreamData(ref status, pCmdParam); if (Dispatcher.CheckAccess() == true) { if (status == 1) { taskTray.Icon = Properties.Resources.TaskIconRed; } else if (status == 2) { taskTray.Icon = Properties.Resources.TaskIconGreen; } else { taskTray.Icon = Properties.Resources.TaskIconBlue; } } else { Dispatcher.BeginInvoke(new Action(() => { if (status == 1) { taskTray.Icon = Properties.Resources.TaskIconRed; } else if (status == 2) { taskTray.Icon = Properties.Resources.TaskIconGreen; } else { taskTray.Icon = Properties.Resources.TaskIconBlue; } })); } } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_NOTIFY2: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; NotifySrvInfo status = new NotifySrvInfo(); CmdStreamUtil.ReadStreamData(ref status, pCmdParam); if (Dispatcher.CheckAccess() == true) { NotifyStatus(status); } else { Dispatcher.BeginInvoke(new Action(() => { NotifyStatus(status); })); } } break; default: pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; break; } return 0; }
void SuspendCmd(byte suspendMode) { suspendMode = suspendMode == 1 ? suspendMode : (byte)2; ErrCode err = cmd.SendChkSuspend(); if (err != ErrCode.CMD_SUCCESS) { if (err == ErrCode.CMD_ERR_CONNECT) { MessageBox.Show("サーバーに接続できませんでした"); } else { MessageBox.Show((suspendMode == 1 ? "スタンバイ" : "休止") + "に移行できる状態ではありません。\r\n(もうすぐ予約が始まる。または抑制条件のexeが起動している。など)"); } return; } if (Settings.Instance.SuspendChk == 1) { SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(0, suspendMode); if (dlg.ShowDialog() == true) { return; } } ushort cmdVal = suspendMode; if (IniFileHandler.GetPrivateProfileInt("SET", "Reboot", 0, SettingPath.TimerSrvIniPath) == 1) { cmdVal |= 0x0100; } if (CommonManager.Instance.NWMode == true) { cmdVal |= 0xFF00;//今はサーバ側の設定を読めてるので無くても大丈夫なはずだけど、一応そのまま if (Settings.Instance.SuspendCloseNW == true) { if (CommonManager.Instance.NW.IsConnected == true) { if (cmd.SendUnRegistTCP(Settings.Instance.NWWaitPort) == ErrCode.CMD_ERR_CONNECT) { } cmd.SendSuspend(cmdVal); CloseCmd(); return; } } } SaveData(); cmd.SendSuspend(cmdVal); }
private void ShowSleepDialog(UInt16 param) { LASTINPUTINFO info = new LASTINPUTINFO(); info.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(info); GetLastInputInfo(ref info); // 現在時刻取得 UInt64 dwNow = GetTickCount(); // GetTickCount()は49.7日周期でリセットされるので桁上りさせる if (info.dwTime > dwNow) { dwNow += 0x100000000; } if (IniFileHandler.GetPrivateProfileInt("NO_SUSPEND", "NoUsePC", 0, SettingPath.TimerSrvIniPath) == 1) { UInt32 ngUsePCTime = (UInt32)IniFileHandler.GetPrivateProfileInt("NO_SUSPEND", "NoUsePCTime", 3, SettingPath.TimerSrvIniPath); UInt32 threshold = ngUsePCTime * 60 * 1000; if (ngUsePCTime == 0 || dwNow - info.dwTime < threshold) { return; } } Byte suspendMode = (Byte)(param & 0x00FF); { SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(0, suspendMode); if (dlg.ShowDialog() != true) { SaveData(); cmd.SendSuspend(param); } } }
private void OutsideCmdCallback(CMD_STREAM pCmdParam, CMD_STREAM pResParam, bool networkFlag) { System.Diagnostics.Trace.WriteLine((CtrlCmd)pCmdParam.uiParam); switch ((CtrlCmd)pCmdParam.uiParam) { case CtrlCmd.CMD_TIMER_GUI_SHOW_DLG: if (networkFlag) { pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; } else { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; this.Visibility = System.Windows.Visibility.Visible; } break; case CtrlCmd.CMD_TIMER_GUI_VIEW_EXECUTE: if (networkFlag) { pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; } else { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; String exeCmd = ""; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref exeCmd); try { string[] cmd = exeCmd.Split('\"'); System.Diagnostics.Process process; System.Diagnostics.ProcessStartInfo startInfo; if (cmd.Length >= 3) { startInfo = new System.Diagnostics.ProcessStartInfo(cmd[1], cmd[2]); } else if (cmd.Length >= 2) { startInfo = new System.Diagnostics.ProcessStartInfo(cmd[1]); } else { startInfo = new System.Diagnostics.ProcessStartInfo(cmd[0]); } if (cmd.Length >= 2) { if (cmd[1].IndexOf(".bat") >= 0) { startInfo.CreateNoWindow = true; if (Settings.Instance.ExecBat == 0) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized; } else if (Settings.Instance.ExecBat == 1) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; } } } process = System.Diagnostics.Process.Start(startInfo); var w = new CtrlCmdWriter(new System.IO.MemoryStream()); w.Write(process.Id); w.Stream.Close(); pResParam.bData = w.Stream.ToArray(); pResParam.uiSize = (uint)pResParam.bData.Length; } catch { } } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_SUSPEND: if (networkFlag) { pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; } else { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref param); Dispatcher.BeginInvoke(new Action(() => { if (closeFlag == false) ShowSleepDialog(param); })); } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_REBOOT: if (networkFlag) { pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; } else { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref param); Byte reboot = (Byte)((param & 0xFF00) >> 8); Byte suspendMode = (Byte)(param & 0x00FF); Dispatcher.BeginInvoke(new Action(() => { if (closeFlag == true) return; SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(reboot, suspendMode); if (dlg.ShowDialog() != true) { SaveData(); cmd.SendReboot(); } })); } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_NOTIFY2: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; NotifySrvInfo status = new NotifySrvInfo(); var r = new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false)); ushort version = 0; r.Read(ref version); r.Version = version; r.Read(ref status); //通知の巡回カウンタをuiSizeを利用して返す(やや汚い) pCmdParam.uiSize = status.param3; Dispatcher.BeginInvoke(new Action(() => { if (closeFlag == false) NotifyStatus(status); })); } break; default: pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; break; } }
void SuspendCmd() { UInt32 err = cmd.SendChkSuspend(); if (err == 205) { MessageBox.Show("サーバーに接続できませんでした"); } else if (err != 1) { MessageBox.Show("休止に移行できる状態ではありません。\r\n(もうすぐ予約が始まる。または抑制条件のexeが起動している。など)"); } else { if (Settings.Instance.SuspendChk == 1) { SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(0, 2); if (dlg.ShowDialog() == true) { return; } } if (CommonManager.Instance.NWMode == false) { if (IniFileHandler.GetPrivateProfileInt("SET", "Reboot", 0, SettingPath.TimerSrvIniPath) == 1) { cmd.SendSuspend(0x0102); } else { cmd.SendSuspend(2); } } else { if (Settings.Instance.SuspendCloseNW == true) { if (CommonManager.Instance.NW.IsConnected == true) { if (cmd.SendUnRegistTCP(Settings.Instance.NWServerPort) == 205) { } cmd.SendSuspend(0xFF02); closeFlag = true; needUnRegist = false; Close(); } } else { cmd.SendSuspend(0xFF02); } } } }
private int OutsideCmdCallback(object pParam, CMD_STREAM pCmdParam, ref CMD_STREAM pResParam) { System.Diagnostics.Trace.WriteLine((CtrlCmd)pCmdParam.uiParam); switch ((CtrlCmd)pCmdParam.uiParam) { case CtrlCmd.CMD_TIMER_GUI_SHOW_DLG: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; this.Visibility = System.Windows.Visibility.Visible; } break; case CtrlCmd.CMD_TIMER_GUI_UPDATE_RESERVE: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; if (Dispatcher.CheckAccess() == true) { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); reserveView.UpdateReserveData(); epgView.UpdateReserveData(); tunerReserveView.UpdateReserveData(); autoAddView.UpdateAutoAddInfo(); recInfoView.UpdateInfo(); CommonManager.Instance.DB.ReloadReserveInfo(); ReserveData item = new ReserveData(); if (CommonManager.Instance.DB.GetNextReserve(ref item) == true) { String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ "); DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond); timeView += endTime.ToString("HH:mm:ss"); taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title; } else { taskTray.Text = "次の予約なし"; } } else { Dispatcher.BeginInvoke(new Action(() => { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); reserveView.UpdateReserveData(); epgView.UpdateReserveData(); tunerReserveView.UpdateReserveData(); autoAddView.UpdateAutoAddInfo(); recInfoView.UpdateInfo(); CommonManager.Instance.DB.ReloadReserveInfo(); ReserveData item = new ReserveData(); if (CommonManager.Instance.DB.GetNextReserve(ref item) == true) { String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ "); DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond); timeView += endTime.ToString("HH:mm:ss"); taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title; } else { taskTray.Text = "次の予約なし"; } })); } } break; case CtrlCmd.CMD_TIMER_GUI_UPDATE_EPGDATA: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; if (Dispatcher.CheckAccess() == true) { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); if (CommonManager.Instance.NWMode == false) { CommonManager.Instance.DB.ReloadEpgData(); } epgView.UpdateEpgData(); } else { Dispatcher.BeginInvoke(new Action(() => { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); if (CommonManager.Instance.NWMode == false) { CommonManager.Instance.DB.ReloadEpgData(); } epgView.UpdateEpgData(); })); } } break; case CtrlCmd.CMD_TIMER_GUI_VIEW_EXECUTE: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; String exeCmd = ""; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref exeCmd); try { string[] cmd = exeCmd.Split('\"'); System.Diagnostics.Process process; if (cmd.Length >= 3) { System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(cmd[1], cmd[2]); if (cmd[1].IndexOf(".bat") >= 0) { startInfo.CreateNoWindow = true; if (Settings.Instance.ExecBat == 0) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized; } else if (Settings.Instance.ExecBat == 1) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; } } process = System.Diagnostics.Process.Start(startInfo); } else if (cmd.Length >= 2) { System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(cmd[1]); if (cmd[1].IndexOf(".bat") >= 0) { startInfo.CreateNoWindow = true; if (Settings.Instance.ExecBat == 0) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized; } else if (Settings.Instance.ExecBat == 1) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; } } process = System.Diagnostics.Process.Start(startInfo); } else { System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(cmd[0]); if (cmd[1].IndexOf(".bat") >= 0) { startInfo.CreateNoWindow = true; if (Settings.Instance.ExecBat == 0) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized; } else if (Settings.Instance.ExecBat == 1) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; } } process = System.Diagnostics.Process.Start(startInfo); } var w = new CtrlCmdWriter(new System.IO.MemoryStream()); w.Write(process.Id); w.Stream.Close(); pResParam.bData = w.Stream.ToArray(); pResParam.uiSize = (uint)pResParam.bData.Length; } catch { } } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_SUSPEND: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref param); Dispatcher.BeginInvoke(new Action(() => ShowSleepDialog(param))); } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_REBOOT: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref param); Byte reboot = (Byte)((param & 0xFF00) >> 8); Byte suspendMode = (Byte)(param & 0x00FF); Dispatcher.BeginInvoke(new Action(() => { SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(reboot, suspendMode); if (dlg.ShowDialog() != true) { cmd.SendReboot(); } })); } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_CHG: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 status = 0; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref status); if (Dispatcher.CheckAccess() == true) { if (status == 1) { taskTray.Icon = Properties.Resources.TaskIconRed; } else if (status == 2) { taskTray.Icon = Properties.Resources.TaskIconGreen; } else { taskTray.Icon = Properties.Resources.TaskIconBlue; } } else { Dispatcher.BeginInvoke(new Action(() => { if (status == 1) { taskTray.Icon = Properties.Resources.TaskIconRed; } else if (status == 2) { taskTray.Icon = Properties.Resources.TaskIconGreen; } else { taskTray.Icon = Properties.Resources.TaskIconBlue; } })); } } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_NOTIFY2: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; NotifySrvInfo status = new NotifySrvInfo(); var r = new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false)); ushort version = 0; r.Read(ref version); r.Version = version; r.Read(ref status); if (Dispatcher.CheckAccess() == true) { NotifyStatus(status); } else { Dispatcher.BeginInvoke(new Action(() => { NotifyStatus(status); })); } } break; default: pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; break; } return 0; }