Dla dobra argumentu rozważ wątek UI jako wątek, który miał wywołanie Application.Run()
lub jeden z jego przeciążeń wywołał go i uruchomił aktywną pętlę komunikatów.Jak wykryć, czy jesteśmy w wątku UI?
Czy istnieje sposób na wykrycie, czy obecnie wykonujemy pracę w takim wątku?
Powodem, dla którego tego chcę, jest to, że mam klasę z prywatną funkcją, która długo działa. Sama klasa jest już wielowątkowa, a użycie tej klasy jest takie, że może być używane z interfejsu lub z wątków działających w tle. Ta funkcja również wpada w tę sieć. Ale nie chcę, aby blokował wątek interfejsu użytkownika. Dlatego chcę wykryć, czy uruchamiam wątek interfejsu użytkownika, a jeśli tak, rozwiąż wywołanie funkcji w wątku tła (prawdopodobnie ThreadPool
, ale to nie jest problem dla tej dyskusji). Jest to całkowicie dobrze zachowane, ale wątki w tle prawdopodobnie opierają się na wyjściu funkcji, więc blokowanie ich jest lepsze, podczas gdy wątek UI uzyskuje dostęp do niego w sposób bardziej "zapamiętywania".
Ładowanie uruchamiane niekoniecznie jest wątkiem GUI lub jedynym wątkiem GUI. –
NIEPRAWIDŁOWE: InvokeRequired zwraca true, jeśli jest na "innym wątku niż ten, dla którego utworzono formant" –
@Rico: Tak, oczywiście. Nie mogę uwierzyć, że literówka od trzech lat siedzi tam i nikogo nie zauważa. Dzięki za złapanie go, zaktualizowałem odpowiedź odpowiednio. –