我有一个Wacom Epad。最初,我在类构造函数上订阅onPenData事件,并在设备断开时取消订阅。
当用户在Wacom屏幕上多次单击时,它会触发我所订阅的onPenData事件。
private void onPenData(wgssSTU.IPenData penData) // Process incoming pen data
{
// Do some stuff
} 因此,我要做的是实现某种机制,以避免在重复单击时执行onPenData。
我该怎么做?
发布于 2018-07-18 12:56:00
不能阻止事件处理程序触发,但可以管理事件处理逻辑执行。
假设有事件处理程序onPenData和OnPenDataBusinessLogic方法:
private void onPenData(wgssSTU.IPenData penData) // Process incoming pen data
{
OnPenDataBusinessLogic(penData);
}
private void OnPenDataBusinessLogic(wgssSTU.IPenData penData)
{
// Do some stuff
}现在,您有了许多选项:
1) bool标志。最简单的一个:
private bool onPenDataRunning;
private void onPenData(wgssSTU.IPenData penData) // Process incoming pen data
{
if (onPenDataRunning)
{
return;
}
onPenDataRunning = true;
try
{
OnPenDataBusinessLogic(penData);
}
finally
{
onPenDataRunning = false;
}
} 2) OnPenDataBusinessLogic延迟执行。每次onPenData开火,(重新)启动一个计时器。经过计时器后,调用OnPenDataBusinessLogic。
3)笔数据缓冲。在onPenData中缓冲数据,在后台线程/任务中通过OnPenDataBusinessLogic处理笔数据。
https://stackoverflow.com/questions/51401297
复制相似问题