Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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# 以多线程方式加载图像_C#_Wpf_Multithreading_Image_Memory Leaks - Fatal编程技术网

C# 以多线程方式加载图像

C# 以多线程方式加载图像,c#,wpf,multithreading,image,memory-leaks,C#,Wpf,Multithreading,Image,Memory Leaks,当我试图在独立线程中加载映像的源代码时,会导致内存泄漏(大量HWNd指针)(ImgSource1是VM上的可绑定属性) 如果您有可能绑定Image控件的Source属性,并设置IsAsync=True,wpf将关心自己在后台线程中获取图像 一般来说,如果控件定义了名称(或x:Name),wpf将在内存中保留控件,因此您应该注意这一点。如果您可以绑定Image控件的Source属性,并设置IsAsync=True,wpf将关心自己在背景线程中获取图像 一般来说,如果控件定义了名称(或x:Name)

当我试图在独立线程中加载映像的源代码时,会导致内存泄漏(大量HWNd指针)(
ImgSource1
是VM上的可绑定属性)


如果您有可能绑定
Image
控件的
Source
属性,并设置
IsAsync=True
,wpf将关心自己在后台线程中获取图像


一般来说,如果控件定义了名称(或x:Name),wpf将在内存中保留控件,因此您应该注意这一点。

如果您可以绑定
Image
控件的
Source
属性,并设置
IsAsync=True
,wpf将关心自己在背景线程中获取图像


一般来说,如果控件定义了名称(或x:Name),wpf将在内存中保留控件,因此您应该注意这一点。

您使用的是什么.NET版本?您尚未显示
CreateImageSource
中发生了什么以及
imageList
是什么。您可能正在分配一些应该调用dispose()的图像资源开着,但你不在t@Sam.Net 4.6@Clemens CreateImageSource()列在一篇文章的末尾,而
imageList
只是一个文件名列表。您使用的是什么.Net版本?您尚未显示
CreateImageSource
中发生了什么以及
imageList
是什么。您可能正在分配一些应该调用的图像资源)开着,但你不在t@Sam.Net 4.6@Clemens CreateImageSource()列在帖子末尾,而
imageList
只是一个文件名列表。感谢您的帮助。今晚刚刚测试过,目前为止效果良好,将长期测试。感谢您的帮助。今晚刚刚测试过,目前为止效果良好,将长期测试。
Thread task = new Thread(() =>
        {
            try
            {
                ImageSource newSource = CreateImageSource(imageList[CurrentSourceIndex], true);
                Application.Current.Dispatcher.Invoke(() =>
                {
                    ImgSource1 = newSource; // <==  Memory leak is here
                });

                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
            catch(Exception ex)
            {
                LogService.WriteLog(ex);
            }
            IsImageChangeAccessible = true;

        });
        task.IsBackground = true;
        task.Start();
var src = new BitmapImage();
                src.BeginInit();
                src.UriSource = new Uri(file, UriKind.Absolute);
                src.CacheOption = BitmapCacheOption.OnLoad;
                src.EndInit();
                src.Freeze();
                return src;