Помощь с Progress Bar и backgroundWorker - PullRequest
0 голосов
/ 27 ноября 2018

Я медленно осваиваю C # и играю перед тем, как начать формальное обучение в новом году.Я создал приложение, которое извлекает данные из базы данных SQL и отображает в dataGridView.Эта таблица может быть очень большой по размеру и может занять некоторое время для загрузки.Я изменил курсор на это время, чтобы пользователь мог видеть, что что-то происходит.Однако я хотел бы добавить в строке процесса.Я устал следовать нескольким учебникам без удачи.Я создал задачу в методе с именем doTask ().Я пытался использовать Backgroundworker, но по какой-то причине моя панель процессов никогда не обновляется.Не помогает, что все учебники, кажется, просто используют таймер, а не реальную задачу.

Из видеороликов, которые у меня появляются, когда вы вызываете RunWorkerAsync (), который затем, в свою очередь, запускает метод?

Любая помощь будет отличной

public Form1()
    {
        InitializeComponent();
        MessageBox.Show("Internal use only. Do NOT sent installers or customers", "INTERNAL USE ONLY", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
    }

    private void getEventsbtn_Click(object sender, EventArgs e)
    {
        progressBar1.Value = 0;
        progressBar1.Maximum = 10;
        backgroundWorker1.RunWorkerAsync();
        // doTask();
    }

    public void doTask()
    {
        DataTable dt = new DataTable("Events");
        SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString);

        if (cn.State == ConnectionState.Closed)
            cn.Open();
        this.Cursor = Cursors.WaitCursor;
        SqlCommand cmd2 = new SqlCommand(@"
        Select e.EventTime as 'Date/time', u.Username as 'User', e.CardNo as 'Token number', dev.PeripheralName as 'Where' , et.EventTypeDescription as 'Event', est.EventSubTypeDescription as 'Details'
        FROM Archive.dbo.Events e
        left join sdk.EventSubTypes est
        on e.EventSubType = est.EventSubTypeID
        join sdk.EventTypes et
        on e.EventType = et.EventTypeID
        join sdk.UsersEx as u
        on e.UserID = u.UserID
        join sdk.PeripheralNames as dev
        on e.Address = dev.SerialNumber
        order by EventTime asc
        ", cn);

        SqlDataAdapter da = new SqlDataAdapter(cmd2);
        da.Fill(dt);
        archievegridview.DataSource = dt;
        label2.Text = archievegridview.Rows.Count.ToString();

        if (archievegridview.Rows.Count < 2)
        {
            MessageBox.Show("No Net2Archive data available", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
        }

        cn.Close();
        this.Cursor = Cursors.Default;
    }

    private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
    {
        for (int i = 1; i <= 10; i++)
        {
            doTask();
            backgroundWorker1.ReportProgress(0);
        }
    }

    private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
    {
        progressBar1.Value += 1;
    }
}

}

...