HandyOrg / HandyControl

Contains some simple and commonly used WPF controls
https://handyorg.github.io/
MIT License
6.18k stars 1.04k forks source link

'The type initializer for 'HandyControl.Controls.Window' threw an exception.' #442

Open DineshSolanki opened 4 years ago

DineshSolanki commented 4 years ago

The exception occurs at Messagebox.Show/Ask/Error etc calls. ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.

To Reproduce Steps to reproduce the behavior: This happens randomly and I couldn't find the exact way to reproduce.

Environment (please complete the following information):

at HandyControl.Controls.Window..ctor()
   at HandyControl.Controls.MessageBox..ctor()
   at HandyControl.Controls.MessageBox.CreateMessageBox(Window owner, String messageBoxText, String caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult, String cancelContent, String confirmContent, String yesContent, String noContent)
   at HandyControl.Controls.MessageBox.<>c__DisplayClass44_0.<Ask>b__0()
   at System.Windows.Threading.Dispatcher.Invoke(Action callback, DispatcherPriority priority, CancellationToken cancellationToken, TimeSpan timeout)
   at System.Windows.Threading.Dispatcher.Invoke(Action callback)
   at HandyControl.Controls.MessageBox.Ask(String messageBoxText, String caption)
   at demo.ViewModels.MainWindowViewModel.DeleteIconsMethod() in C:\Users\myusername\source\repos\demo\demo\ViewModels\MainWindowViewModel.cs:line 441
   at Prism.Commands.DelegateCommand.Execute()
   at Prism.Commands.DelegateCommand.Execute(Object parameter)
   at Prism.Commands.DelegateCommandBase.System.Windows.Input.ICommand.Execute(Object parameter)
   at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
   at System.Windows.Controls.MenuItem.InvokeClickAfterRender(Object arg)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

image

NaBian commented 4 years ago

@ghost1372 can you reproduce this problem?

ghost1372 commented 4 years ago

@NaBian I tried this over and over again, but nothing happened. anyway I will do this again

@DineshSolanki Please upload your example. It may be related to other code in your project

DineshSolanki commented 4 years ago

@NaBian @ghost1372 sorry, I forgot to follow up, I noticed that after removing Notification.Show() from my code, the exception disappeared somehow.I think that should be the culprit. As my app was not in version control at that time, I don't have the old code. Just before the messageBox, I used to show the notification.see if it helps, else I'll also try to reproduce again.

DineshSolanki commented 4 years ago

I tried showing notification again, and it was still working, tried many times, couldn't reproduce, don't know what caused it. We should close this issue for now.

DineshSolanki commented 4 years ago

Hey, sorry to bother again but while updating the same program today, The exception reappeared multiple times. It's happening with the message as well as growinfo - here's the stackTrace -

   at HandyControl.Controls.Window..ctor()
   at HandyControl.Controls.MessageBox..ctor()
   at HandyControl.Controls.MessageBox.CreateMessageBox(Window owner, String messageBoxText, String caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult, String cancelContent, String confirmContent, String yesContent, String noContent)
   at HandyControl.Controls.MessageBox.<>c__DisplayClass44_0.<Ask>b__0()
   at System.Windows.Threading.Dispatcher.Invoke(Action callback, DispatcherPriority priority, CancellationToken cancellationToken, TimeSpan timeout)
   at System.Windows.Threading.Dispatcher.Invoke(Action callback)
   at HandyControl.Controls.MessageBox.Ask(String messageBoxText, String caption)
   at FoliCon.ViewModels.MainWindowViewModel.DeleteIconsMethod() in C:\Users\Drona\source\repos\FoliCon\FoliCon\ViewModels\MainWindowViewModel.cs:line 476
   at Prism.Commands.DelegateCommand.Execute()
   at Prism.Commands.DelegateCommand.Execute(Object parameter)
   at Prism.Commands.DelegateCommandBase.System.Windows.Input.ICommand.Execute(Object parameter)
   at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
   at System.Windows.Controls.MenuItem.InvokeClickAfterRender(Object arg)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
  Name Value Type
$exception {"The type initializer for 'HandyControl.Controls.Window' threw an exception."} System.TypeInitializationException
  ◢ InnerException {Evaluation timed out} System.Exception {System.ArgumentOutOfRangeException}
  Message "Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')" string
  ParamName "index" string
  ▶ TargetSite {Void ThrowArgumentOutOfRange_IndexException()} System.Reflection.MethodBase {System.Reflection.RuntimeMethodInfo}
  Message "The type initializer for 'HandyControl.Controls.Window' threw an exception." string
  Source "HandyControl" string
  TypeName "HandyControl.Controls.Window" string

and here's the method where it happens -

private void DeleteIconsMethod()
        {
            if (Directory.Exists(SelectedFolder))
            {
                //TODO: Replace with DialogService if efficient.
                if (MessageBox.Ask("Are you sure you want to delete all Icons?", "Confirm Icon Deletion") ==
                    System.Windows.MessageBoxResult.OK)
                {
                    Util.DeleteIconsFromPath(SelectedFolder);
                }
            }
            else
            {
                MessageBox.Error("Directory is Empty", "Empty Directory");
            }
        }
ghost1372 commented 4 years ago

@DineshSolanki Please copy Method DeleteIconsFromPath codes here

ghost1372 commented 3 years ago

Is the problem still there? I could not recreate the problem

DineshSolanki commented 3 years ago

@ghost1372 its so random, I'm not sure what cause it or make it go away,

DineshSolanki commented 3 years ago

I'll close the issue as I haven't encountered it yet again

ghost1372 commented 3 years ago

Hi @NaBian i have a repro, that crash with this bug here you can test it.

HandyControl-s-Project.zip

image