2013-11-24 79 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

相关问题