c#中WndProc处理函数的块函数调用
本文关键字:函数调用 处理函数 WndProc | 更新日期: 2023-09-27 18:02:51
我有c#代码,其中窗口正在获取消息(来自GigE相机的图像)。在函数处理程序中,我调用另一个函数对我从消息中获得的图像进行一些处理。这个处理过程可能比我收到下一条消息之间的时间要长。我想使用一些不错的机制来忽略消息,直到处理完成。我可以简单地写:
bool is_processing = false;
void HandleUeyeMessage(int wParam, int lParam)
{
frame = getNewFrame();
if(!is_processing) {
doProcessing(frame);
} else non-blocking ignore
}
void doProcessing(frame f)
{
is_processing = true;
// some processing work...
is_processing = false;
return;
}
但是我想使用一些同步机制,但我真的不知道该用什么因为这不是一般的线程。
你不能忽略单个线程中的消息-当你的应用程序能够响应时,它们将被排队和处理。你可以使用工作线程进行一些基本的同步。
BackgroundWorker _worker=new BackgroundWorker();
void OnMessage(int lparam, int wparam)
{
frame frame=GetFrame();
if(!_worker.IsBusy)
_worker.RunWorkerAsync(frame);
}
void DoWork(object sender,DoWorkEventArgs e)
{
//do processing
}