對於C#和編碼來說,這是一個相對較新的概念。我正在嘗試編寫一個具有某些邏輯的程序,並且還指出了進度條的進度。我正在Main()中啓動一個線程,它執行我所有的業務邏輯。它有一些事件在我需要進度條的地方被激怒。C#Winform多線程序列
Form對象訂閱業務邏輯事件並具有線程安全委託,它們被調用以更新進度條和文本標籤。
我的問題是,因爲Form是在主線程中啓動的,所以我必須在Application.Run()之前啓動業務邏輯線程。當第一個ProgressUpdate事件被激怒時,Form對象仍然不存在。我想一個hacky的方法是在第二個線程中添加Thread.Sleep(100),但我不喜歡這樣。我如何解決這個問題?我在完全錯誤的軌道上? (我是否有道理?)
Form1 theForm = new Form1();
CreateReport theCreateReport = new CreateReport();
Thread t = new Thread(new ThreadStart(theCreateReport.DoProcess));
t.IsBackground = true;
theForm.Subscribe(theCreateReport);
t.Start();
Application.Run(theForm);
theForm是表單。創建報告是我的業務邏輯開始的地方。
這就是爲什麼我將構造函數從默認的VC#S項目中分離出來的原因。它似乎並沒有工作。給我一個錯誤,說在創建對象之前我不應該使用Invoke/BeginInvoke。如果我將一個try catch塊放入空捕捉塊中,它確實有效,但感覺像是一個黑客。這可能只是我很挑剔。 – whatsinaname 2011-04-06 00:10:56
這是一個黑客。 .Net中基於表單的應用程序基本上是圍繞主表單的概念構建的。沒有理由與之抗衡,因爲您的項目已經使用了主表單。 – MusiGenesis 2011-04-06 00:27:59
將此標記爲答案,因爲正如波馬提到的那樣,表單已經存在。該錯誤在我的代碼的不同部分。謝謝。 – whatsinaname 2011-04-18 14:03:14