Я медленно осваиваю 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;
}
}
}