C # WinForms Помощь в реализации BackgroundWorker и загрузке формы - PullRequest
0 голосов
/ 12 января 2019

Чего я хочу достичь:

  • Шаг 1: Когда форма загружается, я хотел отобразить форму загрузки (в виде диалога), которая содержит индикатор выполнения и метку прогресса.

  • Шаг 2: Пока это происходит, я хочу запустить BackgroundWorker, чтобы извлечь записи из базы данных и заполнить мой DataTable. BackgroundWorker обновит форму загрузки завершенных этапов.

  • Шаг 3: После получения всех записей закройте форму загрузки и отобразите записи в DataGridView

На заметку:

  • DataGridView привязан к моему DataSet.[Table].

  • Форма загрузки - это форма Windows, а не MessageBox.

  • Я использую Visual Studio 2017 Community Edition.

  • Я планирую использовать эту реализацию для всех моих взаимодействий с базой данных, таких как обновление и т. Д.

Вопросы:

  • Как обновить элемент управления Progress Bar & Progress Label в форме загрузки с bgwTransactionListing_ProgressChange

  • Мой bgwTransactionListing_DoWork действительно не выполняет никакой работы.

Код

Вот код для Form_Load

namespace MyApplication
{
     public partial class frmTransactionListing : Form
     {
          public frmTransactionListing()
          {
              InitializeComponent();
          }

          frmload LoadingForm = new frmload();

          private void frmTransactionListing_Load(object sender, EventArgs e)
          {
              bgwTransactionListing.RunWorkerAsync();
          }

Вот мой код для BacgroundWorker_DoWork:

private void bgwTransactionListing_DoWork(object sender, DoWorkEventArgs e)
    {
        try
        {
            bgwTransactionListing.ReportProgress(0, "Loading Records");
            System.Threading.Thread.Sleep(100);
            bgwTransactionListing.ReportProgress(100, "Completed");
        }
        catch (Exception ex)
        {
            MessageBox.Show("We have encountered an error and cannot proceed. Error: " + ex.Message);
        }
    }

Вот мой код для BacgroundWorker_ProgressChanged:

private void bgwTransactionListing_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {            
        if(e.ProgressPercentage == 0)
        {
            LoadingForm.ShowDialog();
        }
    }

Вот мой код для BackgroundWorker_RunWorkerCompleted. Здесь я пытаюсь закрыть форму загрузки:

private void bgwTransactionListing_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        dgTransactionList.Refresh();
    }

Дополнительно Спасибо за вашу помощь.

ОБНОВЛЕНИЕ 1: я отключил форму загрузки и попытался поставить таблицу Метод заполнения адаптера на RunWorkerCompleted и DataGridView теперь отображаются записи. Я думал, что метод Fill это процесс получения записей из моей базы данных. Видимо, нет.

ОБНОВЛЕНИЕ 2: я обновил коды, которые у меня есть в настоящее время после того, как я подал заявку предложения от @russelrillema @Jimi. Теперь я могу показать и закрыть Загрузка с. Я также обновил свои проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...