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

标签 c#

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

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

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

有没有办法防止同时多次调用同一个方法

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

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

最佳答案

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

   private static readonly object _syncRoot = new object();

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

您可以阅读有关锁定的更多信息 here.

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

关于c# - 如何避免多次调用同一个方法 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41927729/

相关文章:

c# - 在 C# 中关闭/处理 ServiceHost 线程的正确方法?

c# - 如何自动滚动到包装面板中的特定项目?

c# - 如何使用 Windows 任务计划程序执行 .Net Core 2.0 控制台应用程序?

c# - NEST弹性搜寻-用空格查询字词

c# - Entity Framework Include - 我们可以让它基于条件 .Include(p => includeFiles == true ? p.FileMasters : null)

c# - 如何在 SharePoint 2013 中使用 REST API 将附件文件附加到列表项

c# - .Net 等效于 TTimer Delphi 组件

c# - 绑定(bind)时将文本添加到 TextBlock Text 属性

c# - 在 C# 中使用 FlowLayoutPanel 创建面包屑导航控件

c# - ASP.NET : I wanted to know how to insert '\n' on the label