我在让后台工作人员更新进度条时遇到了一些麻烦。我使用在线教程作为示例,但我的代码无法正常工作。我在这个网站上进行了一些挖掘,但找不到任何解决方案。我对后台工作者/进度的事情很陌生。所以我不完全理解它。
只是为了设置:
我有一个主窗体(窗体 1),它打开另一个带有进度条和状态标签的窗体(窗体 3)。
我的 Form 3 代码如下:
public string Message
{
set { lblMessage.Text = value; }
}
public int ProgressValue
{
set { progressBar1.Value = value; }
}
public Form3()
{
InitializeComponent();
}
我的 Form 1 部分代码:
private void btnImport_Click(object sender, EventArgs e)
{
if (backgroundWorker1.IsBusy != true)
{
if (MessageBox.Show("Are you sure you want to import " + cbTableNames.SelectedValue.ToString().TrimEnd('$') + " into " + _db, "Confirm to Import", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
alert = new Form3(); //Created at beginning
alert.Show();
backgroundWorker1.RunWorkerAsync();
}
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
int count = 0
foreach(DataRow row in DatatableData.Rows)
{
/*... Do Stuff ... */
count++;
double formula = count / _totalRecords;
int percent = Convert.ToInt32(Math.Floor(formula)) * 10;
worker.ReportProgress(percent, string.Format("Completed record {0} out of " + _totalRecords, count));
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
alert.Message = (String) e.UserState;
alert.ProgressValue = e.ProgressPercentage;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
alert.Close();
}
所以。问题是它没有更新任何东西。进度条和标签都在更新。有人可以指出我的写作方向或有建议吗?
那会给你0 * 10
因为count
and _totalRecords
是整数值,这里使用整数除法。因此count
小于总记录数,您有formula
等于0
:
double formula = count / _totalRecords; // equal to 0
int percent = Convert.ToInt32(Math.Floor(formula)) * 10; // equal to 0
好吧,当所有工作完成后,你将拥有formula
等于1
。但这就是进步没有改变的原因。
这是正确的百分比计算:
int percent = count * 100 / _totalRecords;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)