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
我希望我说得更清楚,对不起,我是论坛的新手
你的代码永远递归地调用自己,导致stackoverflow。
setImage方法被称为…
images.Dispatcher.CheckAccess方法返回true或false。
如果为true,则调用分派器再次调用setImage。
如果为false,则开始调用调度程序再次调用setImage。
整个过程重复,并且永远无法从调用返回,因为它只是不断地越来越深地调用setImage,直到堆栈溢出。
取调度程序。在CheckAccess返回true的区域外调用可能会解决您的问题。