Отключенный CheckBox реагирует на щелчок мышью после включения - PullRequest
0 голосов
/ 21 марта 2012

У меня есть несколько флажков в моей форме.

При нажатии кнопки я выполняю некоторую операцию в бэкэнде (около 3 секунд).

До тех пор, пока я не отключу флажки, чтобы предотвратить взаимодействие с пользователем.

Но если я нажму на выключенный флажок, он сработает после того, как включится

Как мне предотвратить это?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Держу пари, что происходит то, что ваш пользовательский интерфейс заморожен, пока вы выполняете ресурсоемкий процесс. Щелчок мыши ставится в очередь и никогда не обрабатывается до тех пор, пока процесс не будет завершен. К этому времени флажки уже были повторно включены.

Я бы предложил использовать BackgroundWorker Thread для обработки вашей тяжелой 3-секундной операции. Это позволит вашему пользовательскому интерфейсу свободно обрабатывать такие вещи, как щелчки мышью, и поможет решить вашу проблему.

0 голосов
/ 21 марта 2012

Вы можете использовать BackgroundWorker для предотвращения зависания пользовательского интерфейса

BackgroundWorker bw = new BackgroundWorker();


bw.WorkerSupportsCancellation = true;
bw.WorkerReportsProgress = true;


private void bw_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;

    for (int i = 1; (i <= 10); i++)
    {
        if ((worker.CancellationPending == true))
        {
            e.Cancel = true;
            break;
        }
        else
        {
            // Perform a time consuming operation and report progress.
            System.Threading.Thread.Sleep(500);
            worker.ReportProgress((i * 10));
        }
    }
}


private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    this.tbProgress.Text = (e.ProgressPercentage.ToString() + "%");
}


private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if ((e.Cancelled == true))
    {
        this.tbProgress.Text = "Canceled!";
    }

    else if (!(e.Error == null))
    {
        this.tbProgress.Text = ("Error: " + e.Error.Message);
    }

    else
    {
        this.tbProgress.Text = "Done!";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...