我对应用程序中的多线程有疑问。我有2个表单-一个mainForm和一个editForm。根据用户请求,mainForm会调用editForm。editForm已实现了一个数据网格,该网格应由一个线程填充。我这样做是这样的:
try
{
InitializeComponent();
Thread loadingDatagridThread = new Thread(new ThreadStart(() =>
{
this.LoadDataGrid();
}));
loadingDatagridThread.Name = "LoadingDatagridThread";
loadingDatagridThread.Start();
}
catch (Exception exp)
{
throw exp;
}
“ LoadDataGrid”方法如下所示:
private void LoadDataGrid()
{
try
{
this.picBox_Loading.Visible = true;
if (this.InvokeRequired == true)
{
this.HaulierList = new Classes.HaulierCollection(Classes.HaulierCollectionKind.ByStopFlag, new object[] { 0 });
this.BeginInvoke(new LoadDataGridDelegate(this.LoadDataGrid));
return;
}
else
{
//Fill the grid
}
}
}
数据网格的集合(HaulierCollection)在线程中时正在加载。然后,当InvokeRequired为false时,将在主线程中填充数据网格。如果我在Visual Studio中工作并在“调试”模式下对其进行测试,则此方案可以正常工作。我可以关闭然后重新打开editForm,并且datagrid的数据始终处于加载状态。但是,如果我在不使用Visual Studio调试模式的情况下从调试文件夹中启动解决方案的EXE文件,则仅当我第一次打开它时,才会填充editForm的数据网格。下次datagrid始终为空。我发现,此行为是由InvokeRequired属性引起的。第一次打开editForm时,它是InvokeRequired = true,但是如果我关闭该窗体并重新打开它,则始终为false。但为什么?关闭表单后,我将处理该表单。
private void EditForm_FormClosed(object sender, FormClosedEventArgs e)
{
this.Dispose();
}
重新打开editForm时,为什么InvokeRequired总是为false?有人可以帮忙吗?
这是handleCreated问题。我将线程启动代码放入editForm的表单加载(显示)事件中,然后工作了。感谢帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句