是的,对不起。 所以,我有一个新的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
我希望我更清楚,我很抱歉,但我是论坛的新手
答案 0 :(得分:2)
您的代码以递归方式自行调用自身,从而导致堆栈溢出。
调用setImage方法......
images.Dispatcher.CheckAccess方法返回true或false。
如果为true,则调用调度程序再次调用setImage。
如果为false,则开始调用调度程序再次调用setImage。
整个过程重复,并且永远不会从调用返回,因为它只是在堆栈溢出之前一直调用setImage越来越深。
将dispatcher.invoke从CheckAccess返回true的区域中取出可能会解决您的问题。