Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从ISampleGrabberCB更新文本框_C#_Winforms_Bitmap_Directshow_Directshow.net - Fatal编程技术网

C# 从ISampleGrabberCB更新文本框

C# 从ISampleGrabberCB更新文本框,c#,winforms,bitmap,directshow,directshow.net,C#,Winforms,Bitmap,Directshow,Directshow.net,我目前有一个工作程序,它显示我的网络摄像头的预览,并使用ISampleGrabberCB界面 使用SampleCBmy程序将图像转换为位图,然后对图像进行条形码处理,然后对条形码进行解码。当我使用MessageBox显示结果时,这非常有效。但是,当我希望用此结果编辑主窗体上的文本框时,启动程序时会出现一些错误 我正在尝试使用ISampleGrabberCB界面中的以下代码更新我的文本框: public int SampleCB(double sampletime, IMediaSample sa

我目前有一个工作程序,它显示我的网络摄像头的预览,并使用ISampleGrabberCB界面

使用
SampleCB
my程序将图像转换为位图,然后对图像进行条形码处理,然后对条形码进行解码。当我使用
MessageBox
显示结果时,这非常有效。但是,当我希望用此结果编辑主窗体上的文本框时,启动程序时会出现一些错误

我正在尝试使用
ISampleGrabberCB
界面中的以下代码更新我的文本框:

public int SampleCB(double sampletime, IMediaSample sample)
    {
        if (sample == null)
        {
            return -1;
        }
        try
        {
            int length = sample.GetActualDataLength();
            IntPtr buffer;
            BitmapData bitmapData = new BitmapData();

            Form1 f1 = new Form1("", "", "");


            if (sample.GetPointer(out buffer) == 0 && length > 0)
            {
                Bitmap bitmapOfFrame = new Bitmap(width, height, pitch, PixelFormat.Format24bppRgb, buffer);


            }
方法changeTextBox1采用我的主要形式,如下所示:

public void changeTextBox1(string text)
    {
        textBox1.Text = text;
    }
我遇到的错误首先是
连接到系统的设备功能不正常
,然后是
没有此类支持的接口
。这似乎只有在我使用
form1f1=newform1(“,”,”)时才会发生

如我所说,如果我删除行
form1f1=newform1(“,”,”)并替换
changeTextBox1(result.Text)MessageBox.Show(result.Text.ToString())的code>这是有效的


如何更新文本框而不是使用MessageBox?

您应该在主UI线程中进行UI更改,但是您的回调示例CB是从另一个系统线程调用的,因此会出现错误。使用消息发布或其他方式将数据从回调线程安全地传递到主UI线程,并使用主UI线程中的新数据更新UI。

如何使用调用来完成此操作?我已经查看了一些SO问题,但我看不出我应该做什么?您需要将窗口消息发布到UI线程,或者以其他方式同步执行,例如,使用您在回调线程中添加到的队列,然后从UI线程中删除。