Задать вопрос
@nicebmw9
Что было дальше ?

Как сделать задержку с интервалом?

Отслеживаю нажатие горячей клавиши пользователем. WndProc - отслеживает сообщения Windows (больше 5 за 1 секунду). Проблема: как избавиться от многочисленного нажатия, чтобы была хотя бы задержка или интервал времени, когда метод SetPrc() будет вызываться ? Иначе получается, что можно очень много раз вызвать метод за 1 секунду. Можно ли как-нибудь заблокировать метод SetPrc() через lock и Thread.Sleep() ?
protected override void WndProc(ref Message keyPressed)
        {
            if (keyPressed.Msg == 0x0312)
            {
                if (CanWork)
                {
                    switch (keyPressed.WParam.ToInt32())
                    {
                        case 1: SetPrtSc(); break;
                    }
                }
            }
            base.WndProc(ref keyPressed);
        }
  • Вопрос задан
  • 196 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@basrach
Красиво будет сделать вот так:
1) Установить пакет System.Reactive
2) Дописать:

...
private Subject<int> myHotkey = new Subject<int>();

public MainForm()
{
    ...

    myHotkey
        .AsObservable()
        .Throttle(TimeSpan.FromSeconds(1))
        .Subscribe(hotkeyid => MessageBox.Show("Нажата горячая клавиша с ID:  " + hotkeyid));
}

...

protected override void WndProc(ref Message keyPressed)
{
    ...
            switch (keyPressed.WParam.ToInt32())
            {
                case 1: 
                {
                    SetPrtSc(); 
                    myHotkey.OnNext(keyPressed.WParam.ToInt32());
                }
                break;
...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы