Nie wiem dlaczego na forum nie ma kategorii o C#, ale że w tej znajduje się zarówno C++ jak i java to myśle że post będzie tutaj pasował ;)
Piszę obecnie klienta IRC'a, i jak to zwykle w tego typu programach bywa występuje tutaj kilka wątków, u mnie w tej chwili dwa, standardowy obsługujący aplikacjie no i połączenie z serwerem IRC'a. Mój problem polega na tym, że czasami wątek ircowy musi wywołać jakąś metodę gui aplikacji w celu np. stworzenia nowej zakładki na wiadomości z kanału, po otrzymaniu od serwera komendy JOIN, której nasz klient jest głownym bohaterem ;) Czyli mamy JOIN, i wywoływana jest metoda AddTab() która leży w klasie której instancja jest tworzona poza wątkiem irca. To jeszcze nie sprawia problemu, lecz podczas dodawania nowej zakładki do kontrolki TabPages (TabPages.Add(tab);) wyrzucany jest wyjątek:
System.ArgumentException: Controls created on one thread cannot be parented to a control on a different thread.
Czy jest jakiś sposób na ominięcie tego? To moje pierwsza wielowątkowa aplikacja, i niebardzo znam jeszcze metody rozwiązywania takich problemów. Wątek tworzony jest w taki sposób:
ThreadPool.QueueUserWorkItem(new WaitCallback(tabs.Server.Connect));