我有一个Wacom Epad。最初,我在类构造函数中订阅onPenData事件,并在设备断开连接时取消订阅该事件。
当用户多次点击Wacom Epad屏幕时,它会触发我订阅的onPenData事件。
private void onPenData(wgssSTU.IPenData penData) // Process incoming pen data
{
// Do some stuff
}
所以我想做的是实现某种机制,以避免onPenData在重复单击时执行。
我该怎么做?
答案 0 :(得分:1)
您不能阻止事件处理程序触发,但是您可以管理事件处理逻辑执行。
假设有事件处理程序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
在后台线程/任务中处理笔数据。