wpf2009. 9. 22. 17:08
Thread를 이용해서 상태 정보를 입력해보자 이걸한 이유는 상태값을 모니터링 해야하는데

마땅히 상태정보를 변경할때 알려주는 이벤트가 없기때문에 쓰레드를 이용해서 2초에 한번씩 계속 상태정보를 뿌려준다.

Thread ServiceStatusUpdateThread;
delegate void DelegateStatusUpdate();
 private bool _active = true;


일단 머 쓰레드랑 ui변경을 위한 delegate와 계속 while문을 돌리기 위한 bool문을 선언한다.


 private void StatusUpdate()
        {
            if (ServiceStatusUpdateThread == null)
            {
                ServiceStatusUpdateThread = new Thread(new ThreadStart (UpdateServiceStatus));
                ServiceStatusUpdateThread.Start();                
            }
        }

이렇게 클래스를 생성하고 쓰레드 시작을 한다.

여기서는 UpdateServiceStatus()메소드를 쓰레드로 돌렸다.


  private void  UpdateServiceStatus()
        {
            while (_active == true)
            {
                Dispatcher.Invoke(DispatcherPriority.Normal, new DelegateStatusUpdate(RefreshStatus));
                Thread.Sleep(2000);
            }
        }

UpdateServiceStatus에는 UI에 업데이트할 Delegate 메소드 RefreshStatus()를 입력한다.

  private void RefreshStatus()
        {
            xDataService.Text = "DataService                : " + iisControl.GetStatusInfo("DataService");
            xDataServiceForCast.Text = "DataServiceForCast       : " + iisControl.GetStatusInfo("DataServiceForCast");
            xDataServiceForManager.Text = "DataServiceForManager : " + iisControl.GetStatusInfo("DataServiceForManager");
        }

자 이제 RefershStatus()에서 본격적으로 상태값을 textBlock에 쓴다 .즉 업데이트한다...

머 이런식으로 하면 되는데 개운하지는 않다.. class라면 notifychanged나 이런걸로 하면 되는데 방법이 없나보다..



Posted by 동동(이재동)