2014-05-21 99 views
2

我想改變圖片的框圖像時,我的板(一個USB模塊)的加入或脫離域計算機。但我認爲我的線程只會執行一次。圖片框的圖片不會改變。圖片框圖像不改變在C#

我的代碼:

bool boardjoined = false; 
void BoardConnecion() 
{ 
    foreach (var item in SerialPort.GetPortNames()) 
    { 
     if (item == "COM3") 
     { 
      boardjoined = true; 
      DisplayImage(_pic_usb, "on.png"); 
     } 
     else 
     { 
      boardjoined = false; 
      DisplayImage(_pic_usb, "off.png"); 
     } 

    } 
} 

public Form1() 
{ 
    InitializeComponent(); 

} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    _pic_usb.Image = Bitmap.FromFile(Application.StartupPath + @"\off.png"); 

    new Thread(new ThreadStart(BoardConnecion)).Start(); 

} 

private void DisplayImage(PictureBox pic, string picName) 
{ 
    pic.Invoke(new EventHandler(delegate 
    { 
     pic.Image = Bitmap.FromFile(Application.StartupPath [email protected]"\" + picName); 
    })); 
} 
+0

嘗試添加在'BoardConnecion'週期與一些'Delay' - 100毫秒。因此,該線程將檢查每100ms如果板連接 –

+0

,但我想線程將被timer.my程序檢查每moment.not必須偵聽端口每一刻,傳遞信息 – user3374618

+0

這將是糟糕的,無延遲,其原因會處理器100%的負載。延遲100ms或50ms並不是什麼大不了的事情。您已經等待驅動程序的初始化(它從板連接一段時間,直到COM3被creted或沒有?)還itwould是運行'DisplayImage'只有當狀態改變 –

回答

1

你可以在BoardConnection永無止境的循環。

void BoardConnecion() 
    { 
     while(true) 
     { 
      foreach (var item in SerialPort.GetPortNames()) 
      { 
       if (item == "COM3") 
       { 
        boardjoined = true; 
        DisplayImage(_pic_usb, "on.png"); 
       } 
       else 
       { 
        boardjoined = false; 
        DisplayImage(_pic_usb, "off.png"); 
       } 

      } 
      Thread.Sleep(500); 
     } 
    } 

您應該增加一個安全開關以脫離環路。 =)

+1

這將是很好添加一些延遲出現,或者它可以得到討厭 - 100%的處理器負載,所以 –

+0

好點。添加 –

0

您可以使用下面提及的代碼

private System.Timers.Timer timerClock = new System.Timers.Timer();  
timerClock.Elapsed += new ElapsedEventHandler(OnTimer); 
timerClock.Interval = 1000; 
timerClock.Enabled = true; 

public void OnTimer(Object source, ElapsedEventArgs e) 
{ 
    foreach (var item in SerialPort.GetPortNames()) 
     { 
      if (item == "COM3") 
      { 
       boardjoined = true; 
       DisplayImage(_pic_usb, "on.png"); 
      } 
      else 
      { 
       boardjoined = false; 
       DisplayImage(_pic_usb, "off.png"); 
      } 

     } 
}