Skip to main content
  1. Posts/
  2. blog.dsinf.net/

C# – cross thread operation invalid. Rozwiązanie proste.

·110 words·1 min
blog.dsinf.net c# unsafe c++
Daniel Skowroński
Author
Daniel Skowroński

Microsoft idąc w “bezpieczeństwo” w C# .NET zabronił wątkom dostawać się do obiektów z innych wątków - głównie sprowadza się to do nieudanej próby zaktualizowania textBoxa, czy label’ki w wielowątkowej aplikacji (wątek pracujący mógłby zgłosić stan pracy do użytkownika).

Rozwiązać problem można na dwa sposoby.

Pierwszy z nich jest dość brutalny i “niebezpieczny”, ale za to skuteczny i szybki. Wystarczy przestawić jedno pole:

Control.CheckForIllegalCrossThreadCalls = false;

Jeśli jesteśmy paranoikami bezpieczeństwa można zezwolić na wywołania międzywątkowe tylko na czas naszych operacji - żeby zły człowiek nie zepsuł interfejsu, albo w przypadku bardziej złożonych aplikacji - czegoś więcej.

Druga opcja to delegaty i Invoke. Całkiem sensowny opis znajduje się tutaj - http://msdn.microsoft.com/pl-pl/library/zyzhdc6b.aspx.