//박스가 날아다니기 시작할 것이다. public static void startmoving(Namyong namyong, ILwin.MainWindow thisWin) { int namyongLoc_x = 0; namyong.status = 0; while (true) { //현재 margin left 값을 가져온다 thisWin.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { namyongLoc_x = (int)namyong.namyongRec.Margin.Left; })); Thread.Sleep(namyong.speedTerm); namyong.status = (namyong.status == 1) ? 0 : 1; thisWin.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { namyong.namyongRec.Fill = namyong.namyongBr[(2*namyong.dir) + namyong.status]; })); if (namyong.dir == LEFT) { //왼쪽 벽에 다다르면 if (namyongLoc_x <= 0) { //방향은 오른쪽으로 바뀌고, 그림도 바뀌어야지. namyong.dir = RIGHT; //말풍선도 오른쪽으로 바뀌고, 말풍선 위치도 바뀐다. thisWin.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { namyong.balloon.rec.Background = namyong.balloon.ballBr[RIGHT]; namyong.balloon.rec.Margin = new Thickness(namyong.namyongRec.Margin.Left - Constants.NAMYONG_BALLOON_RIGHT_DIST, namyong.namyongRec.Margin.Top, 0, 0); })); } //그렇지 않다면 계속 왼쪽으로 이동 else { thisWin.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { namyong.namyongRec.Margin = new Thickness(namyong.namyongRec.Margin.Left - 2, namyong.namyongRec.Margin.Top, namyong.namyongRec.Margin.Right, namyong.namyongRec.Margin.Bottom); namyong.balloon.rec.Margin = new Thickness(namyong.balloon.rec.Margin.Left - 2, namyong.namyongRec.Margin.Top, 0, 0); })); } } else if (namyong.dir == RIGHT) { //왼쪽 벽에 다다르면 if (namyongLoc_x >= 640) { namyong.dir = LEFT; //말풍선도 왼쪽으로 바뀌고, 말풍선 위치도 바뀐다. thisWin.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { namyong.balloon.rec.Background = namyong.balloon.ballBr[LEFT]; namyong.balloon.rec.Margin = new Thickness(namyong.namyongRec.Margin.Left + Constants.NAMYONG_BALLOON_LEFT_DIST, namyong.namyongRec.Margin.Top, 0, 0); })); } //그렇지 않다면 계속 왼쪽으로 이동 else { thisWin.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { namyong.namyongRec.Margin = new Thickness(namyong.namyongRec.Margin.Left + 2, namyong.namyongRec.Margin.Top, namyong.namyongRec.Margin.Right, namyong.namyongRec.Margin.Bottom); namyong.balloon.rec.Margin = new Thickness(namyong.balloon.rec.Margin.Left + 2, namyong.namyongRec.Margin.Top, 0, 0); })); } } } }
//sayKeyword에서 실행되는 스레드. public static void sayKeywordThr(Namyong namyong, Balloon balloon) { //가져올 검색어들. 2개 정도만 가져온다. List<string> keywords = new List<string>(); Thread thrkeyword = new Thread(() => HTMLhandler.getHotKeyword(Constants.IS_NAMYONG, keywords)); thrkeyword.Start(); //기다리자 thrkeyword.Join(); namyong.isGettingKeyword = false; Balloon.setMSGsub(namyong.screen.getMWinReference(), balloon, "아까 전까지 뜨고 있던 키워드는 '" + keywords.ElementAt(0) + "', '" + keywords.ElementAt(1) + "' 라고 합니다."); }
//위 sayaboutCom에서 작동할 스레드 public static void sayaboutComThread(ShowScreen screen, Namyong namyong) { //WMIhandler에 있는 RAM 계산 함수를 작동시켜서 정보를 얻고, 그 스레드를 기다리자 Thread thrRAMWMI = new Thread(() => WMIhandler.initialRAMdata(screen.getMWinReference().getDatasReference())); thrRAMWMI.Start(); thrRAMWMI.Join(); screen.getMWinReference().Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { namyong.balloon.setMSG("현재 사용가능한 RAM 용량은 " + screen.getMWinReference().getDatasReference().getUsableRAM() + "에요."); namyong.isComputingRAM = false; })); }
//박스가 날아다니기 시작할 것이다. public static void startjumping(Namyong namyong, ILwin.MainWindow thisWin) { //점프를 수행한다. int jumpY; for (jumpY = 0; jumpY < 50; jumpY++) { thisWin.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { namyong.namyongRec.Margin = new Thickness(namyong.namyongRec.Margin.Left, (namyong.ypos - jumpY * 3), 0, 0); })); Thread.Sleep(5); } Thread.Sleep(600); for (; jumpY > 0; jumpY--) { thisWin.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { namyong.namyongRec.Margin = new Thickness(namyong.namyongRec.Margin.Left, (namyong.ypos - jumpY * 3), 0, 0); })); Thread.Sleep(5); } //점프가 끝났음을 알린다. namyong.isJumping = false; }