2013-11-24 54 views
3

我想通過另一個類更新我的UI,我試圖通過創建一個form1對象並使用方法更新文本框來實現此目的。這導致了一個錯誤,告訴我我的設備沒有正常運行。從ISampleGrabber獲取字符串並以第一種形式更新文本框

所以,基本上我怎麼用我的samplegrabber.cs類更新Form1上的文本框?這個類不斷被調用,但是我只需要使用字符串。

的ISampleGrabber類調用SampleCB方法,該方法包括:

public int SampleCB(double sampletime, IMediaSample sample) 
    { 
     if (sample == null) 
     { 
      return -1; 
     } 
     try 
     { 
      int length = sample.GetActualDataLength(); 
      IntPtr buffer;   
      if (sample.GetPointer(out buffer) == 0 && length > 0) 
      { 
       Bitmap bitmapOfFrame = new Bitmap(width, height, stride, PixelFormat.Format24bppRgb, buffer); 
      }     
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     Marshal.ReleaseComObject(sample); 
     return 0; 
    } 

Form1的對象if語句中創建的,即使我創建對象(即使沒有f1.updateTextBox(id);)行erroroccurs。

的`updateTextBox1' 在Form1中創建的:

public void updateTextBox1(string id) 
    { 
     textBox1.Text = id; 
    } 

我收到錯誤如下:連接到系統

收到COMException(0x8007001F)的裝置是不 正常。

+1

是否有任何可共享的代碼示例顯示了您嘗試過的內容?另外,你能發佈確切的錯誤信息嗎? – Krease

+0

添加了相關代碼。 – legohead

回答

2

SampleCB在側線上被調用。您不應在此回調中執行任何與UI相關的操作,您可能希望將值存儲在成員變量中,並指示您需要在UI線程上繼續操作。通過posting yourself a message,然後handling it在正確的線程上。

+0

我試圖使用給出的例子,但似乎無法得到它的工作。在我的'SampleCB'中,當前正在顯示一個消息框,我會怎麼說(因爲缺少一個更好的短語)'我完成了,這是字符串'? – legohead

+1

你有選擇如何做,但 - 因爲你尋找一個簡單的事情 - 讓我給你提供不是最好的,但據推測最容易理解。在你的回調函數中,你將字符串存儲在你的內部變量中,並且將另一個'bool'變量設置爲'true'。然後在你的窗口/窗體上你有一個定時器,它定期的回調它的事件,當你看到這個「真」的時候,你也可以使用存儲的字符串。 –

+0

通過「調用它的事件回來」是否意味着在ISampleGrabber類中創建一個新函數並調用它或? – legohead

相關問題