我编写了一个执行两个任务的 C dll:
1) 将某些消息中继到 C# 程序
2) 在不同的线程上执行密集任务
一切正常,但 C# UI 没有响应,即使 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();
}