хотя я использую фоновый рабочий GUI все еще висит ... - PullRequest
0 голосов
/ 22 сентября 2011

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

void ImportNotes_ContextMenuStripItem_Click(object sender, EventArgs e)
{
    if (!backgroundWorker_notesImport.IsBusy)
    {
        mainFrm.ProgressBar.Visible = true;
        backgroundWorker_notesImport.RunWorkerAsync();
    }
}

private void backgroundWorker_notesImport_DoWork(object sender, DoWorkEventArgs e)
{
    ImportNotes();
}

private void backgroundWorker_notesImport_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    mainFrm.ProgressBar.Value = e.ProgressPercentage;
}

void ImportNotes() { }

1 Ответ

0 голосов
/ 22 сентября 2011

Метод ImportNotes() выполняет весь импорт за один большой шаг?

Если это так, то вы по-прежнему не предоставляете UI шанс что-либо сделать. Пример из MSDN показывает, как его следует использовать:

    // This event handler is where the time-consuming work is done.
    private void backgroundWorker1_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);
            }
        }
    }

Вы должны иметь цикл, который позволяет некоторую обработку (в данном случае Sleep) и вызов ReportProgress.

...