//위 reloadCreenThr에서 실행시키는, 새로이 정보를 얻어오는 스레드 public static void getNewDatas(MainWindow mWin) { //---날씨/장소/시간, RAM 정보를 다시 가져온다. HTMLhandler.getWeatherFromHTML(mWin.packs.datas); WMIhandler.initialRAMdata(mWin.packs.datas); }
//첫 메세지들을 출력한다. 매개변수만 잘 전달하면 메인 스레드에서든, 서브 스레드에서든 호출가능 public static void printInitMsgs(ILtextBox textbox, MainWindow mWin) { DateTime currTime = DateTime.Now; string currTimeStr = currTime.ToString("yyyy") + "/" + currTime.ToString("MM") + "/" + currTime.ToString("dd") + " " + currTime.ToString("HH:mm:ss"); textbox.printMSG(mWin.responseMsgs, "Namyong N Daddy started"); textbox.printMSG(mWin.responseMsgs, "현 로그인 시간 : " + currTimeStr); textbox.printMSG(mWin.responseMsgs, "위치 : " + mWin.datas.getLoc()); textbox.printMSG(mWin.responseMsgs, "온도 : " + mWin.datas.getTemper() + ", 날씨 : " + mWin.datas.getWeather()); textbox.printMSG(mWin.responseMsgs, "램 사용가능량 : " + mWin.datas.getUsableRAM()); }
//위 reload에서 호출하는 스레드. 여기선 스크린의 객체들을 제거한다. public static void reloadScreenThr(MainWindow mWin) { //---여러 객체들을 다 지운다. 거기에 달려있는 스레드들도 제거 mWin.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { mWin.screen.getBoard().deleteBoard(); mWin.screen.getNamyong().deleteNamyong(); mWin.screen.getDaddy().deleteDaddy(); mWin.screen.getFlyingboxReference().deleteBOX(); mWin.screen.getMall().deleteMall(); mWin.screen.sp.Children.Clear(); mWin.showScreenGrid.Background = mWin.packs.refreshBr; })); //크롤링을 이용해 새로이 정보를 얻어올 것이다. Thread refresh2 = new Thread(() => getNewDatas(mWin)); refresh2.Start(); refresh2.Join(); //정보를 다 얻어왔다면 텍스트박스를 재생성, 메시지 재출력 mWin.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { mWin.textbox.textboxlines = new List<string>(); mWin.textbox.lines = mWin.textbox.currentLine = 0; mWin.responseMsgs.Text = ""; printInitMsgs(mWin.textbox, mWin); //윈도우를 만든다. mWin.screen = new ShowScreen(mWin.showScreenGrid, mWin.SCREEN_RECT, mWin, mWin.packs); //텍스트 박스가 새로 만든 ShowScreen을 참조하도록 지시 mWin.textbox.addShowScreenReference(mWin.screen); })); //갱신 끝 mWin.isRefreshing = false; }
//타이머 함수. 로딩이 끝나면 잠시 후에 이걸 실행시킬 것이다. static void goto_mainwin(ILwin.InitWindow thiswin) { thiswin.dispatcherTimer.Stop(); Window mainWin = new MainWindow(thiswin.packs); mainWin.Show(); thiswin.Close(); }