2013-11-15 9 views
0

C#, Visual Studio 2010, windows 7 사용 ...양식에 폴링 기능을 추가 할 위치는 어디입니까?

양식이 OvalShape입니다. 폼 스레드에이 함수를 추가하거나 서비스 상태를 확인하고 신호등처럼 OvalShape의 색을 변경하는 백그라운드 스레드를 만들고 싶습니다.

private void ServiceStatus() 
{ 
    if (ServiceManagement.ServiceStatus("OracleServiceXE")) 
    ovalshape.BackColor =Color.Green; 
    else 
    ovalshape.BackColor = Color.Red; 

} 

지속적으로 (매 1-5 초) 실행되도록이 기능을 추가하는 가장 좋은 방법은 어디입니까?

+1

저는 타이머를 사용합니다. 또한 양식에는 실제로 특정 스레드가 없습니다. 모든 양식은 기본 응용 프로그램 스레드 (기본적으로 어쨌든)에서 제공됩니다. –

답변

0

윈폼은 : 틱 이벤트 핸들러를 추가하는 타이머를 클릭 5000 번에 충실하고 간격에 사용 형태, 세트에 타이머를 끕니다. 거기에서 방법을 실행하십시오.

WPF :

using System.Timers; 
Timer serviceStatusTimer = new Timer(5000); 
private void OnLoaded(object sender, RoutedEventArgs e) // Window loaded event 
{ 
    serviceStatusTimer.Elapsed += ServiceStatus; 
    serviceStatusTimer.Enabled = true; 
    serviceStatusTimer.Start(); 
} 
+0

감사합니다. 타이머를 사용하고 쉽게 문제를 해결했습니다. – user2997958

1

합니까 ServiceManagement.ServiceStatus()은 항상 신속하게 반환? 서비스 상태가 false 인 경우 해당 정보를 반환하는 데 지연이 있습니까?

그렇다면 타이머를 통해 기본 UI 스레드에서 해당 라인이 실행되는 것을 원하지 않습니다. 그러면 앱이 응답하지 않을 수 있습니다.

가능성이있는 경우 보조 스레드가 필요합니다. BackgroundWorker() 컨트롤은 하나의 접근 방식 일 수 있습니다.

public partial class Form1 : Form 
{ 

    private BackgroundWorker bgw = new BackgroundWorker(); 

    public Form1() 
    { 
     InitializeComponent(); 
     bgw.WorkerReportsProgress = true; 
     bgw.DoWork += new DoWorkEventHandler(bgw_DoWork); 
     bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged); 
    } 

    private void bgw_DoWork(object sender, DoWorkEventArgs e) 
    { 
     while (true) 
     { 
      if (ServiceManagement.ServiceStatus("OracleServiceXE")) 
      { 
       bgw.ReportProgress(-1, Color.Green); 
      } 
      else 
      { 
       bgw.ReportProgress(-1, Color.Red); 
      } 
      System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5)); 
     } 
    } 

    private void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     ovalshape.BackColor = (Color)e.UserState; 
    } 

} 
관련 문제