Блокировка обработчика события изменения значения полосы прокрутки до тех пор, пока панель не будет освобождена - PullRequest
0 голосов
/ 07 сентября 2018

Предположим, мне нужно выполнить ресурсоемкое задание с помощью полосы прокрутки.

private void hScrollBar_ValueChanged(object sender, EventArgs e)
{
    ReCalculate();
}

void ReCalculate()
{
    try
    {
        int n = hScrollBar1.Value;
        int f0 = hScrollBar2.Value;
        int theta = hScrollBar3.Value;
        int a = hScrollBar4.Value;

        //... resource-intensive task which uses scroll-bar's values.
    }
    catch
    {

    }
}

Проблема, с которой я сталкиваюсь, заключается в том, что обработчик событий выполняется с малейшим изменением полосы прокрутки.

Мне нужно заблокировать выполнение обработчика событий, пока мышь не будет отпущена.

Итак, я попытался использовать обработчики событий мыши-ввода и отпускания-мыши, например:

bool ready = false;
private void hScrollBars_MouseEnter(object sender, EventArgs e)
{
      ready = false;
}

private void hScrollBars_MouseLeave(object sender, EventArgs e)
{
      ready = true;
}

вместе с проверкой вроде:

void ReCalculate()
{
    if(ready)
    {
        try
        {
            int n = hScrollBar1.Value;
            int f0 = hScrollBar2.Value;
            int theta = hScrollBar3.Value;
            int a = hScrollBar4.Value;

            //... resource-intensive task which uses scroll-bar's values.
        }
        catch
        {

        }
    }
}

Но это не работает.

Как я могу это сделать?

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете обработать событие Scroll и проверить e.Type и, если оно было ScrollEventType.EndScroll, запустите свою логику:

private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
    if (e.Type == ScrollEventType.EndScroll)
    {
        // Scroll has ended
        // You can use hScrollBar1.Value
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...