@@ -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