Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF图像控件不更新图像_C#_Wpf_Image_Wpf Controls - Fatal编程技术网

C# WPF图像控件不更新图像

C# WPF图像控件不更新图像,c#,wpf,image,wpf-controls,C#,Wpf,Image,Wpf Controls,我正在做一个项目,需要我获取一堆图像并将它们显示为视频。也就是说,我将每秒更新WPF的图像控件30次。 到目前为止没有运气 BitmapImage img = BitmapToImageSource((Bitmap)image); this.image_box.Dispatcher.Invoke(() => { //this.image_box.Source.Freeze(); this.image_box.Source = img; }); BitmapImage

我正在做一个项目,需要我获取一堆图像并将它们显示为视频。也就是说,我将每秒更新WPF的图像控件30次。 到目前为止没有运气

BitmapImage img = BitmapToImageSource((Bitmap)image);

this.image_box.Dispatcher.Invoke(() =>
{
    //this.image_box.Source.Freeze();
    this.image_box.Source = img;

});

BitmapImage BitmapToImageSource(Bitmap bitmap)
{
    using (MemoryStream memory = new MemoryStream())
    {
        bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
        memory.Position = 0;
        BitmapImage bitmapimage = new BitmapImage();
        bitmapimage.BeginInit();
        bitmapimage.StreamSource = memory;
        bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
        bitmapimage.EndInit();

        return bitmapimage;
    }
}
图像框是图像控件(wpf)。 所以,我希望这段代码能更新图像,给人一种播放视频的错觉。然而它什么也不做。我看到光标在窗口上等待

已编辑----更多信息---

我创建了一个简单的程序来检查图像是否可以在图像控制中更改。但结果是一样的。我看到等待的光标,没有图像

private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            ImageSource s1;
            ImageSource s2;

            s1 = new BitmapImage(new Uri(@"IMAGE_PATH", UriKind.Absolute));
            s2 = new BitmapImage(new Uri(@"IMAGE_PATH", UriKind.Absolute));

            while (true)
            {
                try
                {
                    if (image.Source == s1)
                        image.Source = s2;
                    else
                        image.Source = s1;
                    System.Threading.Thread.Sleep(1000);
                }
                catch(Exception ex)
                {
                    MessageBox.Show("Error");
                }

            }
        }

虽然我知道这个事实,但还是犯了同样的错误。
我们不允许在循环中更新GUI。如果我们想这样做,我们需要创建一个单独的线程。

虽然我知道这个事实,但还是犯了同样的错误。
我们不允许在循环中更新GUI。如果我们想这样做,我们需要创建一个单独的线程。

您的
image\u box.Dispatcher.Invoke
调用意味着在后台线程中调用
BitmapToImageSource
。如果是这种情况,则必须在
bitmapimage.EndInit()
之后调用
bitmapimage.Freeze()
,以使其能够跨线程访问。但是,您应该有一个InvalidOperation异常。否则您的代码应该可以工作。@Clemens,“如果是这种情况,您必须在bitmapimage.EndInit()之后调用bitmapimage.Freeze(),使其可以跨线程访问。”没有帮助。到目前为止,我正在主线程中工作。然后调用是多余的。我也尝试了不调用,但没有工作。我只是在试验一些随机的东西。似乎什么都不管用。我不明白为什么。我没有看到任何错误…
image\u框
实际上显示在您的UI中的某个位置?而
图像
是有效的
位图
?从这里显示的内容来看,您的问题无法回答。您的
image\u框.Dispatcher.Invoke
调用意味着在后台线程中调用
BitmapToImageSource
。如果是这种情况,则必须在
bitmapimage.EndInit()
之后调用
bitmapimage.Freeze()
,以使其能够跨线程访问。但是,您应该有一个InvalidOperation异常。否则您的代码应该可以工作。@Clemens,“如果是这种情况,您必须在bitmapimage.EndInit()之后调用bitmapimage.Freeze(),使其可以跨线程访问。”没有帮助。到目前为止,我正在主线程中工作。然后调用是多余的。我也尝试了不调用,但没有工作。我只是在试验一些随机的东西。似乎什么都不管用。我不明白为什么。我没有看到任何错误…
image\u框
实际上显示在您的UI中的某个位置?而
图像
是有效的
位图
?根据你在这里所展示的,你的问题无法得到回答。