我有一个c#方法,在客户端使用asp,在摄像头检测到QR码时触发
protected void qrDetectado(object sender, EventArgs e)
{
.....
}
然而在某些情况下,它会多次检测到相同的QR码,并多次调用qrDetectado方法,导致数据库等问题很多。
有没有办法同时防止多次广播采用相同的方法
编辑:是的只是为了澄清一点,我通过js调用方法,如果它已经读过代码,我就不需要它再次运行。
通常这种情绪在第一次读取时发生,它有某种延迟,结果是我在数据库中有相同的寄存器3到4次以及其他一些问题,所以,我只需要运行一次,一旦完成,继续阅读
答案 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.
的更多信息如果事实上你实际上只想在对象的生命周期中调用一次,并且只需要一次,那么你可以将一个锁与一个门标志结合起来。