C# 通过Dispatcher更新映像时仍然会显示;不同的线程拥有它”;错误
我正在尝试从不同线程中的事件更新UI中的图像。我正在使用一个调度程序(基于这个问题:)来执行此操作,但仍然会收到“调用线程无法访问此对象,因为另一个线程拥有它”——错误消息位于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
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
并没有改善任何问题