Полагаю, вы получаете это кросс-потоковое исключение, поскольку вы пытаетесь обновить элементы экрана из своего многопоточного кода. Если вам нужно сделать это, вы можете получить простое решение, используя анонимный метод.
Скажите, что вы хотите добавить элемент в список с именем ListBoxLog. Этот код справился бы с любой задачей:
ListBoxLog.Invoke((MethodInvoker)delegate { ListBoxLog.Items.Add("Done"); });
Существует также свойство, которое нужно проверить. InvokeRequired, вы можете проверить, является ли вызов необязательным. Обычно вы проверяете это свойство в функции, которая может вызываться как основным потоком пользовательского интерфейса, так и любым фоновым потоком.
Вы также можете использовать BeginInvoke, как я это делал с Invoke. BeginInvoke полностью асинхронный и не ожидает завершения кода в делегате.