Jak wykryć, czy mamy wątek interfejsu użytkownika?
Dla argumentu rozważ wątek interfejsu użytkownika jako wątek, do którego zadzwonionoApplication.Run()
lub jedno z jego przeciążeń zostało wywołane i ma aktywną pętlę komunikatów.
Czy istnieje sposób na wykrycie, czy obecnie wykonujemy na takim wątku?
Powodem, dla którego tego chcę, jest to, że mam klasę z długo działającą funkcją prywatną. Sama klasa jest już wielowątkowa, a użycie tej klasy jest takie, że można jej użyć zarówno z interfejsu użytkownika, jak iz wątków wykonujących przetwarzanie w tle. Ta funkcja również wpada w tę sieć. Ale nie chcę, aby blokował wątek interfejsu użytkownika. Chcę więc wykryć, czy uruchomiłem wątek interfejsu użytkownika, a jeśli tak, rozwidlić wywołanie funkcji na wątek tła (prawdopodobnieThreadPool
, ale to nie jest kwestia dla tej dyskusji). Jest to całkowicie dobrze zachowane, ale wątki w tle prawdopodobnie opierają się na wynikach funkcji, więc blokowanie dla nich jest lepsze, podczas gdy wątek UI uzyskuje dostęp do niego w sposób bardziej „ustaw i zapomnij”.