参考:Monitor.TryEnter

    通过 Monitor.TryEnter 我们可以尝试获取指定对象的排他锁:

    • 若对象尚未被加锁,Monitor 就成功对该对象进行加锁,并返回 True
    • 若对象已被加锁,Monitor 就无法再加锁,返回 False

    它整体的逻辑很适合来防止事件重复触发,示例代码如下:

    1. private readonly object _lock = new object();
    2. private void FormHexagonPosition_KeyDown(object sender, KeyEventArgs e)
    3. {
    4. try
    5. {
    6. // 如果 _lock 已被加锁就直接返回
    7. if (!Monitor.TryEnter(_lock)) return;
    8. // 业务逻辑代码
    9. }
    10. finally
    11. {
    12. Monitor.Exit(_lock);
    13. }
    14. }