问题标签 [autoresetevent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
525 浏览

c# - 如何确保以正确的顺序调用 AutoResetEvent 方法?

我有一些需要运行计时器的代码。Timer 检查条件,并根据结果向调用者发出信号,表明它可以继续。这是我的伪代码:

我关心的是我如何实例化定时器。如果我以 0 dueTime 启动它,评论说计时器将立即启动。如果调用线程被定时器抢占并且this._reset.Set()调用发生在调用线程有机会调用之前会发生this._reset.WaitOne()什么?这是我必须担心的事情吗?到目前为止,在我的测试中,代码的工作方式与我预期的一样。

请注意,我以这种方式设置代码是因为我想阻止Run()函数直到condition()为真,但我只想condition()每隔一秒左右检查一次。

0 投票
3 回答
74 浏览

c# - 当我尝试从另一个线程更新 UI 时,应用程序没有响应

执行流程:

  1. 从主线程我调用了新线程(并行线程),它正在执行一个长时间运行的过程。
  2. 并行线程正在更新主线程 UI。
  3. 我让我的主线程等到并行线程完成。
  4. 我需要两个线程之间的同步。
  5. 我需要在主线程中使用并行线程的结果,所以我阻塞了主线程,直到并行进程完成。

这是我的代码有问题,请提出解决问题的建议。

0 投票
1 回答
1241 浏览

c# - 自动重置事件不起作用

我的代码如下所示:

后来:

我的问题如下:

我在一个方法中有“wait_till_finish.WaitOne()”,在我调用 Qar_Function 方法之后它处于等待状态,所以首先我想调用该方法,然后我想等到该方法执行并完成,然后然后,在 qar_function 方法中,我设置了 AutoReset。

它不工作。

我正在使用调试器,它没有在 WaitOne 等待,它只是继续移动到下一行。

我究竟做错了什么?谢谢。

0 投票
3 回答
930 浏览

c# - 如何在 WinForms 中使用 AutoResetEvent

我最近发现了关于Threads在我的应用程序中使用AutoResetEvent. 在控制台应用程序中,我会创建一个while(true)循环并依靠AutoResetEvent.WaitOne()等待线程发出信号,例如数据已准备好使用AutoResetEvent.Set(). 我知道如何使用Class具有工作线程方法的线程之间共享数据,以及在工作线程和主线程之间共享的数据元素。

我的问题是如何AutoResetEvent在 Winforms 应用程序中使用,我通常看不到命令​​循环。我应该将WaitOne()呼叫放在 Winforms 应用程序的哪个位置?

关于示例代码:最好的示例是本网站上关于如何使用超时制作 a的答案Console.ReadLine(),这基本上是一个关于如何使用signals. 该示例是控制台应用程序示例。

谷歌搜索时,我的问题的答案可能是使用BackgroundWorker控件?

0 投票
4 回答
1449 浏览

c# - 针板设备的 C# 线程和事件

我是 C# 新手,目前正在开发支持 PIN 键盘的后端代码。基本上,我的代码

我不知道如何为此编写线程,这样一旦在 PIN 后在设备上按下“Enter 键”,系统就会自动滚动运行GetResultPIN()。因此,根据我的基本知识,我编写了以下代码Console.ReadLine()来分隔每个过程:

问题:谁能给我任何关于如何使用可以避免使用的线程/事件/委托的建议Console.ReadLine()

如上所述,Console.ReadLine()仅用于停止程序(抱歉我以这种方式使用它的天真......)一旦我使用Console.ReadLine(), between RequestPIN()and GetResult(),系统至少会等待我从 PIN PAD 输入 PIN (通过 USB 连接到计算机,而不是从键盘),然后我会按键盘上的任何键通过Console.ReadLine(),并且GetResultPIN()能够从 PIN Pad 获取我的 PIN 码.....整个程序现在可以工作了,它没有客户准备好,因为它非常波涛汹涌,由于我添加而不会流动Console.ReadLine()......

所以理想情况下,所有的方法都会一起流动。一旦设备打开,RequestPIN()应该在PIN Pad屏幕上显示询问PIN号码,有人可以在PIN Pad上键入并按Enter键,它自然会流入GetResultPIN()并读取结果,然后在控制台上打印PIN。 .`

或者

如果此人没有输入 PIN 码,设备将等待 30 秒,然后直接GetResultPIN()在控制台上打印出“0000”

我已经查看了踩踏和委托,但不知道在这种情况下如何使用它们....谢谢!

参考: RequestPin() 和 GetResultPIN 如下所列:

waitTime:设备应等待用户开始输入 PIN 的时间

pinMsg:作为用户提示显示的消息,例如“输入 PIN”、“重新输入 PIN”、“验证 PIN”等

minLen 和 maxLen:PIN 的最小长度和最大长度

音调:提示音选项

选项:验证 PIN,不验证 PIN,ISO0 格式,ISO3 格式

输出为:整数,0:成功,非零:错误

基本上,GetResultPIN() 返回一串随机码,例如: 9A00030000047A2000AB,AD781711481B08A2,0当 PIN 成功时。如果引脚输入部分被跳过,它将返回,,0.

0 投票
2 回答
216 浏览

c# - 使用 C# 处理暂停事件

我有 2 节课:

我们在代码中还有其他地方

  • 那么,如果在工作ItemFinished的时候提出ProcessData()来,会发生什么?
  • 我应该使用诸如AutoResetEvent让课堂A等待课堂B结束之类的东西ProcessData吗?
  • 有必要用lockProcessData吗?
  • 可以用 调用类B的线程m_thrd = new Thread(this.ProcessData);吗?这里的事情让我感到困惑 - 在引发任何事件之前不会ProcessData完成ItemStarted(它不会导致第一次生成线程时B已经完成的情况)?ItemStarted
0 投票
1 回答
613 浏览

c# - AutoResetEvent / ManualResetEvent 消耗哪些资源?

c# ManualResetEventAutoResetEvent类的创建或维护成本高吗?

它们是否消耗某种有限的 Windows 内核资源,如果是,它的限制程度如何?

例如,如果我有可以每 100 毫秒创建一个新的 AutoResetEvent 的代码(稍后将被释放),我是否应该担心将旧的 AutoResetEvents 放入池中并重用它们,或者这不是一个重要的问题?

由于它们是 IDisposables,我认为它们消耗某种有限的资源。它们到底消耗了多少,我应该在什么时候开始担心使用太多?

有一个 ManualResetEventSlim,但没有 AutoResetEventSlim 的事实也让我有点担心。

0 投票
1 回答
158 浏览

c# - AutoResetEvents 在等待事件处理程序时锁定主线程

简要说明是我试图用我无法控制的第三方 DLL 启动几个连接事件。一旦发生连接,就会触发一个事件。

我需要在主线程上等待直到发生这种情况,但是每次设置它都会锁定主线程。

调用代码

=--------

=-----------------------------

这段代码的问题在于,在执行 StartInstrumentMonitoring 后,它会在对第三方 DLL 进行必要的调用并附加事件处理程序以与所述库进行交互之后返回。这显然调用 WaitOne() 阻止我正在阻止我捕获从返回的事件的主线程instrument_ConnectionEvent

0 投票
5 回答
9100 浏览

c# - AutoResetEvent.Set() 有什么作用?

如果我这样做:

然后在主线程中我做:

它将状态从 更改falsetrue?

如果是这样,它基本上是:

?

0 投票
1 回答
639 浏览

c# - 为什么没有提示 OutputDataReceived 以防止发出 AutoResetEvent 信号?

我正在制作一个应用程序,它将产生一个具有命令行解释器的进程。我需要从另一台机器向这个 CLI 提供命令。现在,我必须检测命令何时完成,因此我正在检查 CLI 的提示符何时出现在我正在生成的进程的标准输出中。这是一段代码:

现在,代码挂在对 WaitOne() 的调用上。我很困惑为什么 - 我没有在输出中检测到 CLI 提示,而且我从来没有收到任何 WriteLines 告诉我在OutputDataReceived事件中收到了提示,或者收到的数据为空。即,OutputDataReceived当上一个命令完成并显示提示时,没有引发事件。

我提供的输入命令确实需要一段时间,但它确实完成了。我在这里使用 AutoResetEvent 错了吗?