mam coś w rodzaju modelu plug-in, w którym różne skomplikowane kontrole użytkownika są przechowywane w bibliotekach DLL i załadowane i instancję w czasie wykonywania przy użyciuTworzenie kontrole non-UI wątek
Activator.CreateInstanceFrom(dllpath, classname).
Ponieważ jestem loading kilka z nich chciałem zrobić w tle, utrzymując mój interfejs w stanie gotowości, tworząc nowy wątek do ładowania. Kontrolki są następnie nadrzędne do formularza głównego i wyświetlane w razie potrzeby.
Wydaje się to działa dobrze - dopóki nie spróbuję ustawić żadnej właściwości w zagnieżdżonej kontrolce na jednej z tych kontrolek użytkownika, np. w procedurze obsługi zdarzenia przycisku, który zgłasza wyjątek z gwintem krzyża. Zdaje sobie sprawę, że mogłem tego uniknąć, sprawdzając InvokeRequired za każdym razem, gdy uzyskuję dostęp do właściwości, ale wolałbym nie martwić się o to podczas pisania kodu dla formantów użytkownika (zwłaszcza, że są inni piszący te fragmenty kodu, którzy mogą nie zawsze pamiętam).
Moje pytanie brzmi: czy istnieje bezpieczny sposób wykonania tego, co próbuję, lub jak najlepiej załadować te elementy sterujące w tle? Czy jest to w zasadzie niemożliwe i czy muszę trzymać się głównego wątku do tworzenia kontroli?
Mam nadzieję, że informacje, które podałem, są wystarczające, aby moja sytuacja była jasna; jeśli nie, chętnie opracuję i dostarczę próbki kodu.
"dopóki nie spróbuję ustawić żadnej właściwości" - czy jest to w wątku, czy później? –
To później, po tym jak formant użytkownika został zapisany w formularzu głównym (jak w formularzu.controls.add (mycontrol)) –