2015-04-20 35 views
3

我正在使用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(); 

這些方法的工作原理是一樣的。你能給我一個建議如何解決這個問題與多線程?

+0

用戶界面和工作線程不能很好地協同工作。您需要找出哪些花費很長時間並將其委派給工作線程。你可以爲此使用TPL。 UI應該只能在UI線程中訪問。 –

回答

1

你不能這樣多線程,因爲它們都調用UI線程。您需要在單獨的線程上創建常規報表,然後將報表添加到主UI線程上的對象。