我在C#中有代码,其中Window正在获取消息(来自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;
}
但我想使用一些同步机制,但我真的不知道该使用什么,因为这通常不是线程化的东西......
答案 0 :(得分:0)
您不能忽略单个帖子中的消息 - 当您的应用能够响应时,它们将排队并处理。您可以使用工作线程进行一些基本同步。
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
}