스레드를 사용하여 웹 사이트에서 이미지를 가져 와서 부모 폼 (WPF)으로 다시 표시하여 표시합니다. 나는이 문제에 실행하고이 예에 디버깅 관리해야 : 시계()가 자신의 스레드에서 실행되는WPF 이미지 스레딩 (System.InvalidOperationException)
public void Watch()
{
while (true)
{
Bitmap bmp = new Bitmap(1, 1);
BitmapImage bmpImg = new BitmapImage();
this.SetImage(bmp, bmpImg);
}
}
public delegate void SetImageCallback(Bitmap bmp, BitmapImage bmpImg);
private void SetImage(Bitmap bmp, BitmapImage bmpImg)
{
if (!this.imgVideo.Dispatcher.CheckAccess())
{
SetImageCallback del = new SetImageCallback(SetImage);
this.Dispatcher.Invoke(del, bmp, bmpImg);
}
else
{
Bitmap bitmap = bmp;
BitmapImage bitmapImage = bmpImg;
}
}
염두에 두십시오. Window Form에서 PictureBox와 함께 사용할 수있는 비트 맵 객체를 사용하면 모든 것이 훌륭하게 작동합니다. 즉,이 코드를 디버깅 할 때 라인에 도달했을 때
변수를 검사하면 모든 것이 잘되고 예상대로 작동합니다. 나는 다음 줄
BitmapImage bitmapImage = bmpImg;
에 그리고 변수 bmpImage inpsect 얻을 때, 나는 System.InvalidOperationException의 톤을 얻을. 이것이 실제로 실용적이고 WPF Image 객체에 할당되면 "다른 스레드가 소유하고 있기 때문에 호출하는 스레드는이 객체에 액세스 할 수 없습니다"라고 표시됩니다. WPF BitmapImages (ImageSource를 설정하는 데 필요하지만 Windows Forms Bitmap 객체 (PictureBox를 설정하는 데 사용할 수 있음)를 사용하여이 문제가 발생하는 이유는 무엇입니까? WPF에서 어떻게 수정합니까?
읽기이 : http://msdn.microsoft.com/en-us/library/ms750509.aspx –