Możliwe duplikaty:
Must every BeginInvoke be followed by an EndInvoke?
Is EndInvoke() optional, sort-of optional, or definitely not optional?Asynchroniczne wywoływanie - czy wymagane jest EndInvoke?
Mam wielowątkowych aplikacji, a jeden z wątków wtórnych musi dostać jakiś kod do wykonania w głównym wątku raz kilka minut. Nie ma żadnej wartości zwracanej, a drugi wątek nie dba o to, czy podnosi wyjątki, czy też nie działa.
Do tej pory otrzymywałem go do uruchomienia kodu przez Form.Invoke
, ale czasami zajmuje to znacznie więcej czasu niż zwykle (kilka sekund) i blokuje wątek, dopóki nie zostanie ukończony. Potrzebuję drugiego wątku, aby móc kontynuować wykonywanie bez przeciągania przez kilka sekund.
Brzmi, jakby to dobrze działało, ale tak naprawdę nie mam gdzie zadzwonić pod numer EndInvoke
, ponieważ nie chcę na niego czekać ani uzyskać wartości zwracanej. Biorąc pod uwagę, że wywoływany kod wiąże się z wieloma wywołaniami natywnymi, nie jestem pewien, czy jest to dobry pomysł, aby nie EndInvoke
.
Czy muszę w ogóle zadzwonić pod numer EndInvoke
, czy jest jakiś inny sposób uzyskania kodu do uruchomienia w głównym wątku formularza, który powinienem użyć zamiast tego?
Dzięki =)
Awesome, więc mogę zmienić moje 'Invoke's na' BeginInvoke's bez wysadzania czegokolwiek. –