C#-多线程-需要Invoke-奇怪的行为吗?

dns_nx

我对应用程序中的多线程有疑问。我有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?有人可以帮忙吗?

dns_nx

这是handleCreated问题。我将线程启动代码放入editForm的表单加载(显示)事件中,然后工作了。感谢帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章