Я написал C dll, который выполняет две задачи:
1) Передать определенные сообщения программе C #
2) Выполнить интенсивное задание в другом потоке
Все это работает, но пользовательский интерфейс C # не отвечает, хотя C выполняет интенсивную задачу в другом потоке.
Я также представил функцию C, которая запускает интенсивную задачу для C #, что позволяет C # попытаться запустить эту функцию в другом потоке.
Несмотря ни на что, C # застревает, а программа C # перестает отвечать на запросы при выполнении интенсивной задачи.
Я забыл упомянуть, что я написал всю программу на C, и она работает без проблем, но я хотел бы написать библиотеку C # для использования в будущих проектах .NET.
[DllImport(@"C:\projects\math\randomout\Debug\randout.dll", CharSet = CharSet.Auto, EntryPoint = "task_ToggleTask")]
internal static extern bool task_ToggleTask();
__declspec( dllexport ) BOOL task_ToggleTask()
{
if ( _threadStopped )
{
_threadStopped = FALSE;
_t_TaskHandle = ( HANDLE )_beginthread( task_Calculate, 0, NULL );
return TRUE;
}
else
{
_threadStopped = TRUE;
CloseHandle( _t_TaskHandle );
return FALSE;
}
}
static void task_Calculate( void* params )
{
while ( !_threadStopped )
{
WORD nextRestInterval = rand_GetBetween( 15, 50 );
/*
trivial math calculations here...
*/
//next update is at a random interval > 0ms
Sleep( nextRestInterval );
}
_endthread();
}