2015-08-21 23 views
2

是否有可能在C#中的構造函數中調用/觸發/拋出/激發(不知道正確的詞是什麼)事件?C#在構造函數中調用事件

我問的原因是我有一個困境:我有一個需要很長時間才能啓動(通過它的構造函數)的表單,因爲它需要加載大量文件。所以,我想要一個啓動/加載屏幕,直到主窗體啓動。此外,我想用更新來更新啓動畫面,告訴它到目前爲止加載的內容和沒有加載的內容。

我在單獨的線程中運行初始屏幕,並希望發送有關通過事件加載的消息。不幸的是,我似乎無法從主窗體的構造函數中觸發事件。任何人有什麼建議,我可以做什麼?或者我如何從構造函數中觸發事件?

在此先感謝。

+0

你在使用WPF嗎? –

+3

構造函數應該用於初始化類的狀態。然後一切出現。在你的情況下,它看起來像你用不適當的邏輯加載它。所以把邏輯和事件分成不同的方法,比如'Init'。 – Artyom

+0

你正在研究什麼類型的應用程序? WPF,Windows Phone等。 您是否嘗試過異步加載文件? – dimlucas

回答

0

如果您正在使用winform然後採取下列代碼

public partial class Form1 : Form //Your initial form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     LaunchWorkForm(); 
    } 
    private void LaunchWorkForm() 
    { 
     var form2 = new Form2(); 
     form2.OnStatusUpdated += form2_OnStatusUpdated; 
     form2.ShowDialog(); 
    } 

    private void form2_OnStatusUpdated(string status) 
    { 
     //message comes from Working Form 
     //Invoke UI thread and update UI here 
    } 
} 

現在一看,這是有很多工作要做

public partial class Form2 : Form 
{ 
    public delegate void UpdateStatusHandler(string status); 
    public event UpdateStatusHandler OnStatusUpdated; 
    public Form2() 
    { 
     //Start thread here 
     if (OnStatusUpdated != null) 
     { 
      OnStatusUpdated("I am going to start work"); 
     } 
     //Doing a lot of work here 
     if (OnStatusUpdated != null) 
     { 
      OnStatusUpdated("Some of work has been done"); 
     } 
     //Do other 
     if (OnStatusUpdated != null) 
     { 
      OnStatusUpdated("Now I am ready to load the form"); 
     } 
    } 
} 
表單或對話框
1

這個問題可以幫助你

C# constructor event

它包含事件調用構造函數從

+4

歡迎來到堆棧溢出!雖然這可能在理論上回答這個問題,[這將是更可取的](// meta.stackoverflow.com/q/8259)在此包含答案的基本部分,並提供供參考的鏈接。 – ryanyuyu

0

過程如果您可以在參數傳遞給構造函數,那麼你可以使用一個回調。喜歡的東西:

public class MyClass 
{ 
    public MyClass(Action<Progress> callback) 
    { 
     // Do work here... 
     callback(progress); 
     // More work, etc. 
    } 
}