来自C#中WndProc处理函数的块函数调用

时间:2013-03-07 14:30:02

标签: c# synchronization nonblocking

我在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;
}

但我想使用一些同步机制,但我真的不知道该使用什么,因为这通常不是线程化的东西......

1 个答案:

答案 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
}