Click here to Skip to main content
15,895,667 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am trying to use a foreach statement to remove the children of my main grid.
When I do this, I get the following runtime exception:
The calling thread cannot access this object because a different thread owns it.


Here is my code:
C#
List<DraggableCard> remove=new List<DraggableCard>();
                foreach (UIElement em in cont.Children)//This is where I get my exception
                {
                    if (em is DraggableCard)
                    {
                        var d = em as DraggableCard;
                        if (d.UID == str.Replace("REMOVE_CARD{", "").Replace("}", ""))
                            remove.Add(d);
                    }
                }
                foreach (DraggableCard d in remove)
                {
                    cont.Children.Remove(d);
                }


I don't know why this would happen; any help would be appreciated.
Posted

1 solution

Quote:
In WPF, only the thread that created a DispatcherObject may access that object. For example, a background thread that is spun off from the main UI thread cannot update the contents of a Button that was created on the UI thread. In order for the background thread to access the Content property of the Button, the background thread must delegate the work to the Dispatcher associated with the UI thread. This is accomplished by using either Invoke or BeginInvoke. Invoke is synchronous and BeginInvoke is asynchronous. The operation is added to the event queue of the Dispatcher at the specified DispatcherPriority.


Try running your code using Dispatcher.Invoke so that it runs on the same thread as the UI.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900