Dispatcher.Invoke中的错误

本文关键字:错误 Invoke Dispatcher | 更新日期: 2023-09-27 18:18:52

是的,很抱歉。所以,我有一个新的WPF项目,这将显示一旦它开始流一个IP摄像机。为此,我使用只显示图像的字符串。然而,为了确保它变成视频,我使用了线程。因为视频流的字符串不起作用。为了避免不同线程访问冲突的问题,请使用委托。我发布了委托和委托方法的代码:

 public delegate void Del(Image images, string url);
        public void setImage(Image images,string url)
        {
            if (images.Dispatcher.CheckAccess())
            {
                Del ert = new Del(setImage);
                images.Dispatcher.Invoke(ert, new object[] { images, url });
                BitmapImage img = new BitmapImage();
                img.BeginInit();
                img.UriSource = new Uri(url);
                img.EndInit(); // Getting exception here 
                images.Source = img;
            }
            else
            {
                images.Dispatcher.BeginInvoke(new Del(setImage), DispatcherPriority.Normal,
                                                     new object[] { images, url });
            }
        }

        public void StreamImg()
        {
            while (true)
            {
                var date = DateTime.Today.Hour;
                setImage(image1, @"http://ipaddress/jpg/image.jpg" + "?" + date);
                Thread.Sleep(10);
             }
        }

但是我有错误:

images.Dispatcher.Invoke(ert, new object[] { images, url });

错误是

An unhandled exception of type 'System.StackOverflowException' in WindowsBase.dll

我希望我说得更清楚,对不起,我是论坛的新手

Dispatcher.Invoke中的错误

你的代码永远递归地调用自己,导致stackoverflow。

setImage方法被称为…

images.Dispatcher.CheckAccess方法返回true或false。

如果为true,则调用分派器再次调用setImage。

如果为false,则开始调用调度程序再次调用setImage。

整个过程重复,并且永远无法从调用返回,因为它只是不断地越来越深地调用setImage,直到堆栈溢出。

取调度程序。在CheckAccess返回true的区域外调用可能会解决您的问题。