I have programmed an application that it needs to download *.png files and set it into the background of the button in WPF. So, when i run this program, it faces the Error as
No imaging component suitable to complete this operation was found.”
My code is as below :
First application downloads the file with WebClient class’s object:
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);
and when download completed event occurred:
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;
}
NOTE
Because of run these blocks of codes in BackgroundWorker, I use Dispatcher to set button Background property
So, when i run the program, System.NotSupportedException occurred as below :
Exception from HRESULT: 0x88982F50 Error Code : -2003292336 Message :
No imaging component suitable to complete this operation was found.
Source : PresentationCore Stack Trace : at
System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(Uri
uri, Stream stream, BitmapCacheOption cacheOption, Guid& clsId,
Boolean& isOriginalWritable, Stream& uriStream, UnmanagedMemoryStream&
unmanagedMemoryStream, SafeFileHandle& safeFilehandle) at
System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(Uri
baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions,
BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy,
Boolean insertInDecoderCache) at
System.Windows.Media.Imaging.BitmapImage.FinalizeCreation() at
System.Windows.Media.Imaging.BitmapSource.CompleteDelayedCreation()
at System.Windows.Media.Imaging.BitmapSource.get_WicSourceHandle()
at System.Windows.Media.Imaging.BitmapSource.get_DUCECompatiblePtr()
at
System.Windows.Media.Imaging.BitmapSource.UpdateBitmapSourceResource(Channel
channel, Boolean skipOnChannelCheck) at
System.Windows.Media.Imaging.BitmapSource.AddRefOnChannelCore(Channel
channel) at
System.Windows.Media.Imaging.BitmapSource.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(Channel
channel) at
System.Windows.Media.ImageBrush.AddRefOnChannelCore(Channel channel)
at
System.Windows.Media.Brush.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(Channel
channel) at
System.Windows.Media.RenderData.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(Channel
channel) at System.Windows.UIElement.RenderContent(RenderContext
ctx, Boolean isOnChannel) at
System.Windows.Media.Visual.UpdateContent(RenderContext ctx,
VisualProxyFlags flags, Boolean isOnChannel) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.UpdateChildren(RenderContext ctx,
ResourceHandle handle) at
System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) at
System.Windows.Media.Visual.Render(RenderContext ctx, UInt32
childIndex) at
System.Windows.Media.CompositionTarget.Compile(Channel channel) at
System.Windows.Media.CompositionTarget.System.Windows.Media.ICompositionTarget.Render(Boolean
inResize, Channel channel) at
System.Windows.Media.MediaContext.Render(ICompositionTarget
resizedCompositionTarget) at
System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object
resizedCompositionTarget) at
System.Windows.Media.MediaContext.RenderMessageHandler(Object
resizedCompositionTarget) at
System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate
callback, Object args, Int32 numArgs) at
MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object
source, Delegate method, Object args, Int32 numArgs, Delegate
catchHandler) at
System.Windows.Threading.DispatcherOperation.InvokeImpl() at
System.Threading.ExecutionContext.runTryCode(Object userData) at
System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode
code, CleanupCode backoutCode, Object userData) at
System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state, Boolean
ignoreSyncCtx) at
System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state) at
System.Windows.Threading.DispatcherOperation.Invoke() at
System.Windows.Threading.Dispatcher.ProcessQueue() at
System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32
msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at
MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam,
IntPtr lParam, Boolean& handled) at
MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at
System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate
callback, Object args, Int32 numArgs) at
MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object
source, Delegate method, Object args, Int32 numArgs, Delegate
catchHandler) at
System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority
priority, TimeSpan timeout, Delegate method, Object args, Int32
numArgs) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd,
Int32 msg, IntPtr wParam, IntPtr lParam) at
MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) at
System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame
frame) at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window) at
WPF_KSMMessenger.App.Main() in
C:\Users\Hossein\Desktop\WPF_KSMMessenger\WPF_KSMMessenger\obj\x86\Debug\App.g.cs:line
0 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,
String[] args) at
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state, Boolean
ignoreSyncCtx) at
System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state) at
System.Threading.ThreadHelper.ThreadStart()
What should I do to solve this problem?
Thanks for your attention.
Your code works fine for me on a random image selected from Google images, so my guess is that the image you are downloading has an issue of some sort. You can try the following code in the handler right before Dispatcher.Invoke.
Then use “MyImage2.png” instead. It is an attempt to have the encoder “fix” the image before loading it into the brush. To be honest, while this code works for me, I almost didn’t post this because I have no idea if it will work for your situation, and I don’t like posting code when I don’t know the result. Definitely let me know if it helps.