Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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# 通过Dispatcher更新映像时仍然会显示;不同的线程拥有它”;错误_C#_Wpf_Multithreading_Dispatcher - Fatal编程技术网

C# 通过Dispatcher更新映像时仍然会显示;不同的线程拥有它”;错误

C# 通过Dispatcher更新映像时仍然会显示;不同的线程拥有它”;错误,c#,wpf,multithreading,dispatcher,C#,Wpf,Multithreading,Dispatcher,我正在尝试从不同线程中的事件更新UI中的图像。我正在使用一个调度程序(基于这个问题:)来执行此操作,但仍然会收到“调用线程无法访问此对象,因为另一个线程拥有它”——错误消息位于I.Source=s。这样做的正确方式是什么 void OnEvent(object sender, EventArgs e) { ImageSource s = e.Image; Dispatcher.BeginInvoke((Action)( () => UpdateUI(myIm

我正在尝试从不同线程中的事件更新UI中的图像。我正在使用一个调度程序(基于这个问题:)来执行此操作,但仍然会收到“调用线程无法访问此对象,因为另一个线程拥有它”——错误消息位于
I.Source=s。这样做的正确方式是什么

void OnEvent(object sender, EventArgs e)
{
    ImageSource s = e.Image;
    Dispatcher.BeginInvoke((Action)(
        () => UpdateUI(myImage, s)
    ));
}

void UpdateUI(Image i, ImageSource s)
{
    i.Source = s;
}

谢谢你的建议

您是在当前线程上调度,而不是在UI线程上调度。您首先需要获得对UI线程调度程序的访问权。使用

Application.Current.Dispatcher.BeginInvoke(...)
相反


另请参见此问题:

您是在当前线程上调度,而不是在UI线程上调度。您首先需要获得对UI线程调度程序的访问权。使用

Application.Current.Dispatcher.BeginInvoke(...)
相反


另请参见此问题:

您是在当前线程上调度,而不是在UI线程上调度。您首先需要获得对UI线程调度程序的访问权。使用

Application.Current.Dispatcher.BeginInvoke(...)
相反


另请参见此问题:

您是在当前线程上调度,而不是在UI线程上调度。您首先需要获得对UI线程调度程序的访问权。使用

Application.Current.Dispatcher.BeginInvoke(...)
相反


另请参见此问题:

您出现此错误是因为您的
ImageSource
是在不同的线程上创建的,而不是您要在其上使用它的线程。您可以通过在
ImageSource

ImageSource s = e.Image;
s.Freeze();

您之所以出现此错误,是因为您的
ImageSource
是在不同的线程上创建的,而不是要在其上使用它的线程。您可以通过在
ImageSource

ImageSource s = e.Image;
s.Freeze();

您之所以出现此错误,是因为您的
ImageSource
是在不同的线程上创建的,而不是要在其上使用它的线程。您可以通过在
ImageSource

ImageSource s = e.Image;
s.Freeze();

您之所以出现此错误,是因为您的
ImageSource
是在不同的线程上创建的,而不是要在其上使用它的线程。您可以通过在
ImageSource

ImageSource s = e.Image;
s.Freeze();

无法将在后台线程中创建的ImageSource作为源分配给UI控件。

您可以访问
myImage.Dispatcher
以获取与图像控制关联的实际调度程序:

myImage.Dispatcher.BeginInvoke((Action)delegate       
  {
     ImageSource s = e.Image;
     UpdateUI(myImage, s);
  });


分配前,在
ImageSource
上调用
Freeze()
。冻结对象可以跨线程访问。

在后台线程中创建的ImageSource不能作为源分配给UI控件。

您可以访问
myImage.Dispatcher
以获取与图像控制关联的实际调度程序:

myImage.Dispatcher.BeginInvoke((Action)delegate       
  {
     ImageSource s = e.Image;
     UpdateUI(myImage, s);
  });


分配前,在
ImageSource
上调用
Freeze()
。冻结对象可以跨线程访问。

在后台线程中创建的ImageSource不能作为源分配给UI控件。

您可以访问
myImage.Dispatcher
以获取与图像控制关联的实际调度程序:

myImage.Dispatcher.BeginInvoke((Action)delegate       
  {
     ImageSource s = e.Image;
     UpdateUI(myImage, s);
  });


分配前,在
ImageSource
上调用
Freeze()
。冻结对象可以跨线程访问。

在后台线程中创建的ImageSource不能作为源分配给UI控件。

您可以访问
myImage.Dispatcher
以获取与图像控制关联的实际调度程序:

myImage.Dispatcher.BeginInvoke((Action)delegate       
  {
     ImageSource s = e.Image;
     UpdateUI(myImage, s);
  });



分配前,在
ImageSource
上调用
Freeze()
。冻结对象可以跨线程访问。

您是在当前线程上调度,而不是在UI线程上调度。您首先需要获得对UI线程调度程序的访问权。您从哪种类型的对象进行调度?您是在当前线程上进行调度,而不是在UI线程上进行调度。您首先需要获得对UI线程调度程序的访问权。您从哪种类型的对象进行调度?您是在当前线程上进行调度,而不是在UI线程上进行调度。您首先需要获得对UI线程调度程序的访问权。您从哪种类型的对象进行调度?您是在当前线程上进行调度,而不是在UI线程上进行调度。您首先需要获得对UI线程调度程序的访问权。您是从哪种对象发送的?谢谢,我使用
Freeze()
ImageSource s=e.Image.Clone()成功地完成了发送。使用myImage.Dispatcher没有任何帮助。太好了。。!!这只是为了以防万一
调度器
不正确。主要问题是我在回答中添加了一个粗体字。谢谢,我使用
Freeze()
ImageSource s=e.Image.Clone()成功地解决了这个问题。使用myImage.Dispatcher没有任何帮助。太好了。。!!这只是为了以防万一
调度器
不正确。主要问题是我在回答中添加了一个粗体字。谢谢,我使用
Freeze()
ImageSource s=e.Image.Clone()成功地解决了这个问题。使用myImage.Dispatcher没有任何帮助。太好了。。!!这只是为了以防万一
调度器
不正确。主要问题是我在回答中添加了一个粗体字。谢谢,我使用
Freeze()
ImageSource s=e.Image.Clone()成功地解决了这个问题。使用myImage.Dispatcher没有任何帮助。太好了。。!!这只是为了以防万一
调度器
不正确。主要问题是我在回答中添加了粗体字。谢谢,我使用Freeze()和ImageSource s=e.Image.Clone()成功地解决了这个问题;谢谢,我使用Freeze()和ImageSource s=e.Image.Clone()完成了这项工作;谢谢,我使用Freeze()和ImageSource s=e.Image.Clone()完成了这项工作;谢谢,我使用Freeze()和ImageSource s=e.Image.Clone()完成了这项工作;使用
Application.Current.Dispatcher
myImage.Dispatcher
没有任何改进。我现在使用
Freeze()
。非常感谢。使用
Application.Current.Dispatcher
myImage.Dispatcher
并没有改善任何问题