@@ -105,7 +105,7 @@ private void ReloadWidgets()
105105
106106 public void RefreshWidgetList ( )
107107 {
108- for ( int i = 0 ; i < WidgetItems . Count ; i ++ )
108+ for ( int i = WidgetItems . Count - 1 ; i >= 0 ; i -- )
109109 {
110110 if ( ! WidgetItems [ i ] . WidgetItemModel . IsWidgetSettingEnabled )
111111 RemoveWidgetAt ( i ) ;
@@ -116,8 +116,11 @@ public void RefreshWidgetList()
116116
117117 public async Task RefreshWidgetProperties ( )
118118 {
119- foreach ( var viewModel in WidgetItems . Select ( x => x . WidgetItemModel ) )
120- await viewModel . RefreshWidgetAsync ( ) ;
119+ await MainWindow . Instance . DispatcherQueue . EnqueueOrInvokeAsync ( async ( ) =>
120+ {
121+ foreach ( var viewModel in WidgetItems . Select ( x => x . WidgetItemModel ) . ToList ( ) )
122+ await viewModel . RefreshWidgetAsync ( ) ;
123+ } ) ;
121124 }
122125
123126 private bool InsertWidget ( WidgetContainerItem widgetModel , int atIndex )
@@ -136,19 +139,28 @@ private bool InsertWidget(WidgetContainerItem widgetModel, int atIndex)
136139
137140 if ( atIndex > WidgetItems . Count )
138141 {
139- WidgetItems . Add ( widgetModel ) ;
142+ MainWindow . Instance . DispatcherQueue . EnqueueOrInvokeAsync ( ( ) =>
143+ {
144+ WidgetItems . Add ( widgetModel ) ;
145+ } ) ;
140146 }
141147 else
142148 {
143- WidgetItems . Insert ( atIndex , widgetModel ) ;
149+ MainWindow . Instance . DispatcherQueue . EnqueueOrInvokeAsync ( ( ) =>
150+ {
151+ WidgetItems . Insert ( atIndex , widgetModel ) ;
152+ } ) ;
144153 }
145154
146155 return true ;
147156 }
148157
149158 public bool CanAddWidget ( string widgetName )
150159 {
151- return ! ( WidgetItems . Any ( ( item ) => item . WidgetItemModel . WidgetName == widgetName ) ) ;
160+ return MainWindow . Instance . DispatcherQueue . EnqueueOrInvokeAsync ( ( ) =>
161+ {
162+ return ! ( WidgetItems . Any ( ( item ) => item . WidgetItemModel . WidgetName == widgetName ) ) ;
163+ } ) . GetAwaiter ( ) . GetResult ( ) ;
152164 }
153165
154166 private void RemoveWidgetAt ( int index )
@@ -158,25 +170,35 @@ private void RemoveWidgetAt(int index)
158170 return ;
159171 }
160172
161- WidgetItems [ index ] . Dispose ( ) ;
162- WidgetItems . RemoveAt ( index ) ;
173+ MainWindow . Instance . DispatcherQueue . EnqueueOrInvokeAsync ( ( ) =>
174+ {
175+ WidgetItems [ index ] . Dispose ( ) ;
176+ WidgetItems . RemoveAt ( index ) ;
177+ } ) ;
163178 }
164179
165180 public void RemoveWidget < TWidget > ( ) where TWidget : IWidgetViewModel
166181 {
167- int indexToRemove = - 1 ;
168-
169- for ( int i = 0 ; i < WidgetItems . Count ; i ++ )
182+ MainWindow . Instance . DispatcherQueue . EnqueueOrInvokeAsync ( ( ) =>
170183 {
171- if ( typeof ( TWidget ) . IsAssignableFrom ( WidgetItems [ i ] . WidgetControl . GetType ( ) ) )
184+ int indexToRemove = - 1 ;
185+
186+ for ( int i = 0 ; i < WidgetItems . Count ; i ++ )
172187 {
173- // Found matching types
174- indexToRemove = i ;
175- break ;
188+ if ( typeof ( TWidget ) . IsAssignableFrom ( WidgetItems [ i ] . WidgetControl . GetType ( ) ) )
189+ {
190+ // Found matching types
191+ indexToRemove = i ;
192+ break ;
193+ }
176194 }
177- }
178195
179- RemoveWidgetAt ( indexToRemove ) ;
196+ if ( indexToRemove >= 0 )
197+ {
198+ WidgetItems [ indexToRemove ] . Dispose ( ) ;
199+ WidgetItems . RemoveAt ( indexToRemove ) ;
200+ }
201+ } ) ;
180202 }
181203
182204 // Command methods
@@ -191,10 +213,13 @@ private async Task ExecuteReloadWidgetsCommand()
191213
192214 public void Dispose ( )
193215 {
194- for ( int i = 0 ; i < WidgetItems . Count ; i ++ )
195- WidgetItems [ i ] . Dispose ( ) ;
216+ MainWindow . Instance . DispatcherQueue . EnqueueOrInvokeAsync ( ( ) =>
217+ {
218+ for ( int i = 0 ; i < WidgetItems . Count ; i ++ )
219+ WidgetItems [ i ] . Dispose ( ) ;
196220
197- WidgetItems . Clear ( ) ;
221+ WidgetItems . Clear ( ) ;
222+ } ) ;
198223 }
199224 }
200225}
0 commit comments