I want the layouts of some of my RadControls to be persisted in background via a new Thread/Task. The corresponding method is invoked so I can access the control that should be persisted without any error. But I'm always getting an exception at the time I call PersistenceManager.Save(control). Here's my code:
Can you please provide help why PersistenceManager.Save method is always throwing an exception here? How to use PersistenceManager to save a layout in background/new Task?
// --- Part of CustomRadGradView.cs (inherits from RadGridView) ---// Save this RadGridViews layout in backgroundTask.Run(() => { using (var manager = new CustomPersistenceManager()) { // this is current RadGridView manager.SaveLayout(this, file); } }}// --- Part of CustomPersistenceManager.cs (inherits from PersistenceManager) ---// save layout of any Telerik controlpublic bool SaveLayout(Control control, string file = null){ // Current thread has no access to control -> Invoke required if (control.Dispatcher.CheckAccess() == false) { bool result = false; Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => result = DoSaveLayout(control, file))); return result; } // Current thread has access to control return DoSaveLayout(control, file);}// save layout to streamprivate bool DoSaveLayout(Control control, string file = null){ // this lines work without any errors so method is invoked correctly; thread has access to control! string name = control.Name; // returns name of control control.Name = "New name"; // just for testing // Next line always throws an InvalidOperationException using (var stream = Save(control)) // call save method of Teleriks PersistenceManager class { stream.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(stream)) { string text = reader.ReadToEnd(); File.WriteAllText(path, text); } }}Can you please provide help why PersistenceManager.Save method is always throwing an exception here? How to use PersistenceManager to save a layout in background/new Task?