2009-08-30 17 views
6

Piszę aplikację Windows File Filewatcher, która będzie szukać zmian w określonym folderze, a następnie loguje szczegóły w pliku TXT.Niepoprawna operacja wątku: Kontrola uzyskana z wątku innego niż wątek, który został utworzony na

Śledziłem dokładnie to, co jest wymienione w tym artykule poniżej http://www.codeproject.com/KB/dotnet/folderwatcher.aspx

kiedy uderzy F5 z mojej aplikacji, a następnie utworzyć lub zmodyfikować plik w folderze, który jest obserwowany rzuca niżej wymienionych błędu.

Proszę o pomoc

operacja Cross wątek nie ważne: kontrola „txtFolderActivity” obejrzano z wątku innego niż wątek został utworzony na.

Odpowiedz

9

Musisz użyć metody Invoke w formularzu np. z anonimowym delegatem, aby dokonać zmian w reakcji na wydarzenie.

Obsługa zdarzeń jest wywoływana za pomocą innego wątku. Ten drugi wątek nie może uzyskać dostępu do formantów w formularzu. Musi "wywołać" je, aby wątek wykonał wszystkie czynności kontrolne, które początkowo je stworzyły.

Zamiast:

myForm.Control1.Text = "newText"; 

trzeba napisać:

myForm.Invoke(new Action(
delegate() 
{ 
    myForm.Control1.Text = "newText"; 
})); 
+0

+1 - Muszę wypróbować swój sposób na rozwiązanie tego problemu, gdyż jest to znacznie prostsze niż mojego obecnego podejścia. –

+0

+1 Wielkie dzięki @Mischa. To bardzo ułatwiło mi zadanie. :) – IsmailS

1

Zasadniczo musisz mieć przynajmniej dwa wątki w swojej aplikacji, a wątek, na którym działa logika sterowania, jest inny, więc pojawia się ten błąd, ponieważ elementy sterujące nie są wątkowo bezpieczne.

To ma na celu ochronę użytkownika przed problemami, które mogą być spowodowane przez wiele wątków zmieniających tę samą kontrolę w tym samym czasie.

można znaleźć znacznie więcej szczegółów, patrząc tutaj: http://msdn.microsoft.com/en-us/library/ms171728%28VS.80%29.aspx

Powiązane problemy