So if you try to update GUI controls (datagridviews, checkboxes etc.) from a background thread, you will get an invalid cross-thread operation exception. To update your GUI, you need to return to the main thread and do it from there.
While I like this housekeeping logic, keeping jobs for main and background threads distinctly defined, I'm not sure what problems could be caused (or better said how things could get messed up) if this was allowed. Can someone explain for what reason it was decided to be like this?