Mam DLL w C++, która jest podłączana w C#
Problem jest taki:
DLL metoda **A (konstruktor) **inicjuje wątek (std::thread) i działa (wątek obsługujący zdarzenia w DLL)
DLL metoda S zwraca pewne statusy
DLL metoda **B (destruktor) **czeka na zakończenie wątku - join - i kończy pracę DLL
W C# (GUI) inicjuje BackgroundWorker, który odbiera statusy z dll (metoda S), i aktualizuje kontrolki wizualne
Kiedy zrobię coś takiego, że w metodzie BackgroundWorker wywołuję:
Invoke(new Action(() =>
{
SetControls(true);
DLL.B(); //to zawiesi program przy próbie join w metodzie dll-ki DLL.B
}));
Przeniesienie DLL.B poza Invoke rozwiązuje problem
Invoke(new Action(() =>
{
SetControls(true);
}));
DLL.B(); //działa
No ale niestety nie mogę zagwarantować że implementujący DLL będzie zawsze tak robił.
Można to tak zabezpieczyć?