【发布时间】:2015-01-22 20:50:15
【问题描述】:
我有一个接受来自用户的某些输入的表单。 当用户单击“确定”时,我将用户输入的输入插入设置并存储它。这个过程在主窗体中完成,有点长(大约 15 秒)
所以我在后台工作人员中做这项工作。
以下是我的代码:
frmProgress progressBar ;
private void SomeMethod()
{
if (frm.ShowDialog(this) == DialogResult.OK)
{
List<Criteria> selectedCriterias = new List<Criteria>(frm.SelectedCriteria);
bool isOverWriteExistingCriteria = frm.IsOverwriteExistingCriteria;
object[] args = new object[] {selectedCriterias, isOverWriteExistingCriteria};
// STart Background worker
backgroundFillCriteria.RunWorkerAsync(args);
// Display my progressForm
progressBar = new frmProgress("Updating Specified Criteria. . .");
if (progressBar != null && !progressBar.IsDisposed)
progressBar.ShowDialog();
}
}
private void backgroundFillCriteria_DoWork(object sender, DoWorkEventArgs e)
{
object[] args = e.Argument as object[];
List<Criteria> scanAlertCriterias = args[0] as List<Criteria>;
bool isOverwriteExistingCriteria = (bool)args[1];
UpdateCriteria(scanCriterias, isOverwriteExistingCriteria);
}
private void (List<Criteria> scanCriterias, bool isOverwriteExistingCriteria)
{
// Does all processing
}
private void backgroundCriteria_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
{
try
{
if (progressBar != null)
{
progressBar.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "\n" + ex.StackTrace);
}
}
我的问题是 - 我的标准已更新 - 但应用程序在 Progressform 上挂起。我无法继续
我猜我的处理方式不对!
请帮忙!!
【问题讨论】:
-
解释挂起。停止工作?错误信息?如果它停止工作,为什么不显示解决此问题的代码?
UpdateCriteria似乎是这个问题的中心。 -
后台工作人员有一个特定的
WorkerReportsProgress属性和匹配的ProgressChanged事件来帮助你解决这个问题。您可以显示模态表单,但从 ProgressChanged 事件更新它 -
RunWorkerCompletedEventArgs有 error 吗? progressBar 是空的吗? -
Progressbar 不为空 - 在每个方法中进行检查。应用程序显示 msg -“应用程序已停止工作!”。 Update Criteria() 方法进行了一些验证,然后将用户指定的参数存储到变量中
-
“应用程序已停止工作”不是“挂起”。这是一个崩溃(即异常)。请充分调查您的问题,以便您了解什么异常,并编辑您的问题,使其准确无误。 IE。使用正确的术语、实际的异常信息——包括异常名称、消息和堆栈跟踪——并且不使用短语“挂起”来描述“崩溃”。
标签: c# backgroundworker