Я работаю над приложением C# и сталкиваюсь с этой странной проблемой. У меня есть .dll, который был построен на C++, и мне нужно вызвать некоторые функции из этого .dll из приложения C#.Избегайте этого состояния гонки в программе C#
Рассмотрим этот пример кода:
public partial class MainWindows: Window
{
public MainWindow()
{
InitializeComponent();
ConfigurationFunctions.StartMain(); //Start main is the DLL function in C++
int x = ConfigurationFunctions.ReturnIntExp();
StringBuilder sb = ConfigurationOptions.ReturnSomethingExp();
}
}
C++ .cpp файл
EXPORT_API int xExp;
EXPORT_API char cExp;
EXPORT_API StartMain()
{
//Calculate `x` and `y` in this program values here and allocate to variables to be returned from function
xExp = x;
cExp = c;
}
EXPORT_API int ReturnIntExp()
{
return xExp;
}
EXPORT_API char ReturnSomethingExp()
{
return cExp;
}
Проблема заключается в том, когда я запускаю StartMain()
функцию из .dll, то вычислить некоторые значения для int
и char
, которые должны быть отнесены к переменным (которые фактически возвращены в приложение C#)
Но после StartMain()
приложение C# должно подождать до завершения функции StartMain()
(которая в этом случае занимает ок. 3-4 сек, а сама dll запускает два/три других процесса), и только затем продолжить дальше или иначе, переменные x
и sb
в приложении C# будут иметь пустые/бессмысленные значения.
Как я могу достичь этого в этом случае?
Я не вижу проблемы. Функция 'StartMain' будет работать до тех пор, пока работа не будет выполнена. Когда работа завершена, приложение C# получит контроль над исполнением и продолжит вызов 'ReturnIntExp'. Здесь нет проблем. – Dialecticus