异步添加表单上的组件

时间:2015-04-20 14:20:55

标签: c# multithreading winforms

我正在使用WinForms我遇到了以下问题。我应该在具体的时间段内动态创建和添加表单两个选项卡。

这是主要布局

IMainGeneralReportForm mainGeneralReportLayoutForm =
       ObjectFactory.GetOrCreateView<IMainGeneralReportForm>();

我尝试以下一种方式添加我的元素:

    ObjectFactory.ShowView<IGeneralReportSimpleView>();
    ObjectFactory.ShowView<IGeneralReportAdvancedSearchView>();

方法ShowView完美无缺。但是当我逐个调用方法时,程序的性能有点慢。所以我决定以下一种方式使用多线程:

     MainGeneralReportForm generalReportForm = mainGeneralReportLayoutForm as MainGeneralReportForm
generalReportForm.Invoke(new SimpleViewDelegate(() =>
            {
                return ObjectFactory.ShowView<IGeneralReportSimpleView>()
            }));

generalReportForm.Invoke(new AdvancedViewDelegate(() =>
            {
                return ObjectFactory.ShowView<IGeneralReportAdvancedSearchView>()
            }));

    private delegate IGeneralReportSimpleView SimpleViewDelegate();
    private delegate IGeneralReportAdvancedSearchView AdvancedViewDelegate();

这些方法的工作方式相同。你能给我一个如何用多线程解决这个问题的建议吗?

1 个答案:

答案 0 :(得分:1)

你不能以这种方式多线程,因为他们都在调用UI线程。您需要在单独的线程上创建一般报告表单,然后将报告添加到主UI线程上的对象。