"Не найдено ни одного компонента, подходящего для выполнения этой операции".
Я запрограммировал приложение, чтобы оно загружало файлы *.png и устанавливало его на фоне кнопки в WPF
, Итак, когда я запускаю эту программу, она сталкивается с ошибкой как
Не найдено ни одного компонента, подходящего для выполнения этой операции ".
Мой код, как показано ниже:
Первое приложение загружает файл с WebClient
Объект класса:
System.Net.WebClient wClient = new System.Net.WebClient();
Uri downloadUri = new Uri(MyUri, UriKind.Absolute);
wClient.DownloadFileAsync(downloadUri, "MyImage.png");
wClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wClient_DownloadFileCompleted);
и когда загрузка завершена, произошло событие:
ImageBtn.Dispatcher.Invoke(new Action(() =>
{
ImageBrush ib = new ImageBrush();
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri("MyImage.png", UriKind.Relative);
bi.EndInit();
ib.ImageSource = bi;
ImageBtn.Background = ib;
}
ПРИМЕЧАНИЕ Из-за запуска этих блоков кодов в BackgroundWorker
, Я использую Dispatcher
установить кнопку Background
имущество
Итак, когда я запускаю программу, System.NotSupportedException
произошло как показано ниже:
Исключение из HRESULT: 0x88982F50 Код ошибки: -2003292336 Сообщение: не найден компонент формирования изображения, подходящий для выполнения этой операции. Источник: трассировка стека PresentationCore: в System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(Uri uri, потоковый поток, BitmapCacheOption cacheOption, Guid& clsId, логический и isOriginalWritable, безопасный и безопасный поток файлов.Imaging.BitmapDecoder.CreateFromUriOrStream(URI baseUri, Uri uri, Поток потока, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy, логический insertInDecoderCache) в System.Windows.Media.ImaImaMation.Imag.BitmapSource.CompleteDelayedCreation ()
в System.Windows.Media.Imaging.BitmapSource.get_WicSourceHandle()
в System.Windows.Media.Imaging.BitmapSource.get_DUCECompatiblePtr()
в System.Windows.Media.Imaging.BitmapSource.UpdateBitmapSourceResource(канал канала, логический skipOnChannelCheck) в System.Windows.Media.Imaging.BitmapSource.AddRefOnChannelCore(канал канала) в System.Windows.Media.SourceSit.Imaging.Media.Composition.DUCE.IResource.AddRefOnChannel(канал канала) в System.Windows.Media.ImageBrush.AddRefOnChannelCore(канал канала)
в System.Windows.Media.Brush.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(канал канала) в System.Windows.Media.RenderData.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(канал канал) в System.Windows.UIElement.RenderContent(RenderContext ctx, Boolean isOnChannel) в System.Windows.Media.Visual.UpdateContent(RenderContext ctx, флаги VisualProxyFlags, логический isOnChannel) в System.Windows.Media.xurt.) в System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (обработчик ресурсов) System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (маркер RenderContext ctx, ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext.indows cx).Visual.UpdateChildren (RenderCo ntxt ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (дескриптор RenderContext ctx, ResourceHandle) в System.Windows.Media.Vteur.) в System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (обработчик ресурсов) System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (маркер RenderContext ctx, ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext.indows cx).Visual.UpdateChildren(RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (дескриптор RenderContext ctx.Vidual.Windows) в ResourceHandle).RenderRecur sive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visildxtet. Дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRectet).Windows.Media.Visual.UpdateChildren(RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (рендер RenderContext, стек Windows).Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows. UpdateChildren (Рендер Контекст ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (рендер RenderContext ctx, ResourceHandle) в System.Windows.Media.VisurtxRender) в System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (обработчик ресурсов) System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (маркер RenderContext ctx, ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext.indows cx).Visual.UpdateChildren(RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (дескриптор RenderContext ctx.Vidual.Windows) в ResourceHandle).RenderRec ursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visht. Дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) в System.Windows.Media.Visual.Render(RenderContext ctx, UInt32 childIndex) в System.Windows.Media.CompositionTarget.Compile(канал канала).Windows.Media.) в System.Windows.Media.MediaContext.RenderMessageHandler (Object resizedCompositionTarget) в System.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, объектные аргументы, Int32 numArgs) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Источник объекта, метод Delegate, аргументы объекта, Int32 numArgs, Delegate catchHandler) в System.Windows.Threading.DispatcherOperation.InvokeImpl() в System.Threading.ExecutionContext.runTryCode (Object userDatatime) в System.DataTime. CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup (код TryCode, backoutCode CleanupCode, объект userData) в System.Threading.ExecutionContext.Run(обратный вызов ExecutionContext executeContext, контекстная обратная связь ContextCallback, состояние объекта, callback-контекстная ситуация, Состояние объекта) в System.Windows.Threading.DispatcherOperation.Invoke () в System.Windows.Threading.Dispatcher.ProcessQueue () в System.Windows.Threading.Dispatcher.WndProcHook (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lPm, Логическое и обработанное) в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & handled) в MS.Win32.Hw ndSubclass.DispatcherCallbackOperation (Object o) в System.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, аргументы объекта, Int32 numArgs) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (источник объекта, метод делегата, объектные аргументы, объектные аргументы, Int32, Делегат catchHandler) в System.Windows.Threading.Dispatcher.InvokeImpl(приоритет DispatcherPriority, тайм-аут TimeSpan, метод делегата, аргументы объекта, Int32 numArgs) в MS.Win32.HwndSubclass.SubclassWndProc (IntPtr hwnd, Int32mpP), в MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) в System.Windows.Threading.Dispatcher.PushFrameImpl(фрейм DispatcherFrame) в System.Windows.Application.RunDispatcher(игнорирование объектов)
в System.Windows.Application.RunInternal(окно окна) в WPF_KSMMessenger.App.Main() в C:\Users\Hossein\Desktop\WPF_KSMMessenger\WPF_KSMMessenger\obj\x86\Debug\App.g.cs: строка 0 в системе.AppDomain._nExecuteAssembly(сборка RuntimeAssembly, аргументы String[]) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ExecutionContext.Run(ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, логическое значение ignoreSyncCtx) в System.Threading.ExecutionContext.Run(обратный вызов ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadH
Что я должен сделать, чтобы решить эту проблему?
Спасибо за внимание.
2 ответа
Ваш код отлично работает для меня на случайном изображении, выбранном из изображений Google, поэтому я предполагаю, что у загружаемого вами изображения есть какая-то проблема. Вы можете попробовать следующий код в обработчике прямо перед Dispatcher.Invoke.
var encoder = new PngBitmapEncoder();
var image = new BitmapImage( new Uri( "MyImage.png", UriKind.Relative ) );
encoder.Frames.Add( BitmapFrame.Create( image ) );
using ( var stream = new FileStream( "MyImage2.png", FileMode.Create, FileAccess.Write ) )
{
encoder.Save( stream );
}
Тогда используйте "MyImage2.png" вместо этого. Это попытка заставить кодировщик "исправить" изображение перед загрузкой его в кисть. Если честно, хотя этот код работает для меня, я почти не публиковал его, потому что понятия не имею, будет ли он работать в вашей ситуации, и мне не нравится публиковать код, когда я не знаю результата. Определенно дайте мне знать, если это поможет.
Файлы.png с нулевым размером файла приведут к такой же ошибке.