从ISampleGrabber获取字符串并以第一种形式更新文本框

时间:2013-11-24 18:17:39

标签: c# winforms directshow invoke directshow.net

我想通过另一个类更新我的UI,我尝试通过创建一个form1对象并使用一个方法来更新文本框。这会导致错误,通知我我的设备运行不正常。

所以基本上如何使用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);)行,错误也会发生。

`updateTextBox1'在Form1中创建:

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

我收到的错误如下:

  

COMException(0x8007001F)连接到系统的设备不是   运作正常。

1 个答案:

答案 0 :(得分:2)

在侧线程上调用

SampleCB。您不应该在此回调中执行任何与UI相关的操作,而是您可能希望将值存储在成员变量中,并指示您需要继续在UI线程上,例如在posting yourself a message上,然后handling it在正确的帖子上。