As with most Windows Forms Controls, instance members of GridControl are not thread-safe.
Any interaction with the grid *must* be done on the thread that created the grid. You have to protect calls into the grid with grid.InvokeRequired checks, and it necessary, launch a delegate on the grid's thread with grid.Invoke. You have to use InvokeRequired on a method by method basis. Anytime you access the grid within a method that *might* have been called from the non-UI thread, you must use grid.InvokeRequired to test whether this call is coming in on the grid thread. If not, then you must call grid.Invoke on a new delegate to force the call to be on the UI thread.
Here is a little
sample that illustrates how to handle this problem.
Here is a link to a MSDN article by Ian Griffiths on this problem. At the bottom of this article are two links to earlier articles by Chris Sells that are a good read.