问题标签 [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.
c# - 如何确保以正确的顺序调用 AutoResetEvent 方法?
我有一些需要运行计时器的代码。Timer 检查条件,并根据结果向调用者发出信号,表明它可以继续。这是我的伪代码:
我关心的是我如何实例化定时器。如果我以 0 dueTime 启动它,评论说计时器将立即启动。如果调用线程被定时器抢占并且this._reset.Set()
调用发生在调用线程有机会调用之前会发生this._reset.WaitOne()
什么?这是我必须担心的事情吗?到目前为止,在我的测试中,代码的工作方式与我预期的一样。
请注意,我以这种方式设置代码是因为我想阻止Run()
函数直到condition()
为真,但我只想condition()
每隔一秒左右检查一次。
c# - 当我尝试从另一个线程更新 UI 时,应用程序没有响应
执行流程:
- 从主线程我调用了新线程(并行线程),它正在执行一个长时间运行的过程。
- 并行线程正在更新主线程 UI。
- 我让我的主线程等到并行线程完成。
- 我需要两个线程之间的同步。
- 我需要在主线程中使用并行线程的结果,所以我阻塞了主线程,直到并行进程完成。
这是我的代码有问题,请提出解决问题的建议。
c# - 自动重置事件不起作用
我的代码如下所示:
后来:
我的问题如下:
我在一个方法中有“wait_till_finish.WaitOne()”,在我调用 Qar_Function 方法之后它处于等待状态,所以首先我想调用该方法,然后我想等到该方法执行并完成,然后然后,在 qar_function 方法中,我设置了 AutoReset。
它不工作。
我正在使用调试器,它没有在 WaitOne 等待,它只是继续移动到下一行。
我究竟做错了什么?谢谢。
c# - 如何在 WinForms 中使用 AutoResetEvent
我最近发现了关于Threads
在我的应用程序中使用AutoResetEvent
. 在控制台应用程序中,我会创建一个while(true)
循环并依靠AutoResetEvent.WaitOne()
等待线程发出信号,例如数据已准备好使用AutoResetEvent.Set()
. 我知道如何使用Class
具有工作线程方法的线程之间共享数据,以及在工作线程和主线程之间共享的数据元素。
我的问题是如何AutoResetEvent
在 Winforms 应用程序中使用,我通常看不到命令循环。我应该将WaitOne()
呼叫放在 Winforms 应用程序的哪个位置?
关于示例代码:最好的示例是本网站上关于如何使用超时制作 a的答案Console.ReadLine()
,这基本上是一个关于如何使用signals
. 该示例是控制台应用程序示例。
谷歌搜索时,我的问题的答案可能是使用BackgroundWorker
控件?
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
.
c# - 使用 C# 处理暂停事件
我有 2 节课:
我们在代码中还有其他地方
- 那么,如果在工作
ItemFinished
的时候提出ProcessData()
来,会发生什么? - 我应该使用诸如
AutoResetEvent
让课堂A
等待课堂B
结束之类的东西ProcessData
吗? - 有必要用
lock
在ProcessData
吗? - 可以用 调用类
B
的线程m_thrd = new Thread(this.ProcessData);
吗?这里的事情让我感到困惑 - 在引发任何事件之前不会ProcessData
完成ItemStarted
(它不会导致第一次生成线程时B
已经完成的情况)?ItemStarted
c# - AutoResetEvent / ManualResetEvent 消耗哪些资源?
c# ManualResetEvent和AutoResetEvent类的创建或维护成本高吗?
它们是否消耗某种有限的 Windows 内核资源,如果是,它的限制程度如何?
例如,如果我有可以每 100 毫秒创建一个新的 AutoResetEvent 的代码(稍后将被释放),我是否应该担心将旧的 AutoResetEvents 放入池中并重用它们,或者这不是一个重要的问题?
由于它们是 IDisposables,我认为它们消耗某种有限的资源。它们到底消耗了多少,我应该在什么时候开始担心使用太多?
有一个 ManualResetEventSlim,但没有 AutoResetEventSlim 的事实也让我有点担心。
c# - AutoResetEvents 在等待事件处理程序时锁定主线程
简要说明是我试图用我无法控制的第三方 DLL 启动几个连接事件。一旦发生连接,就会触发一个事件。
我需要在主线程上等待直到发生这种情况,但是每次设置它都会锁定主线程。
调用代码
=--------
=-----------------------------
这段代码的问题在于,在执行 StartInstrumentMonitoring 后,它会在对第三方 DLL 进行必要的调用并附加事件处理程序以与所述库进行交互之后返回。这显然调用 WaitOne() 阻止我正在阻止我捕获从返回的事件的主线程instrument_ConnectionEvent
c# - AutoResetEvent.Set() 有什么作用?
如果我这样做:
然后在主线程中我做:
它将状态从 更改false
为true
?
如果是这样,它基本上是:
?
c# - 为什么没有提示 OutputDataReceived 以防止发出 AutoResetEvent 信号?
我正在制作一个应用程序,它将产生一个具有命令行解释器的进程。我需要从另一台机器向这个 CLI 提供命令。现在,我必须检测命令何时完成,因此我正在检查 CLI 的提示符何时出现在我正在生成的进程的标准输出中。这是一段代码:
现在,代码挂在对 WaitOne() 的调用上。我很困惑为什么 - 我没有在输出中检测到 CLI 提示,而且我从来没有收到任何 WriteLines 告诉我在OutputDataReceived
事件中收到了提示,或者收到的数据为空。即,OutputDataReceived
当上一个命令完成并显示提示时,没有引发事件。
我提供的输入命令确实需要一段时间,但它确实完成了。我在这里使用 AutoResetEvent 错了吗?