如何避免多次调用同一个方法c#

时间:2017-01-30 01:03:46

标签: c#

我有一个c#方法,在客户端使用asp,在摄像头检测到QR码时触发

protected void qrDetectado(object sender, EventArgs e)
{
    .....
}

然而在某些情况下,它会多次检测到相同的QR码,并多次调用qrDetectado方法,导致数据库等问题很多。

有没有办法同时防止多次广播采用相同的方法

编辑:是的只是为了澄清一点,我通过js调用方法,如果它已经读过代码,我就不需要它再次运行。

通常这种情绪在第一次读取时发生,它有某种延迟,结果是我在数据库中有相同的寄存器3到4次以及其他一些问题,所以,我只需要运行一次,一旦完成,继续阅读

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是使用lock。这将阻止调用线程在尝试获取对象_syncRoot上的锁时,只有一个线程可以立即锁定对象。一旦lock语句中的代码完成,线程将释放锁,然后另一个线程可以输入该代码块。我已将对象声明为static,因此它对于类的所有实例都是相同的对象。请注意,这不会锁定服务器/进程。

   private static readonly object _syncRoot = new object();

   protected void qrDetectado(object sender, EventArgs e)
   {
        lock(_syncRoot)
        {
            // Do stuff
        }
   }

您可以阅读有关锁定here.

的更多信息

如果事实上你实际上只想在对象的生命周期中调用一次,并且只需要一次,那么你可以将一个锁与一个门标志结合起来。

相关问题