我有一種情況,我希望主線程在等待,而其他線程可以在主線程上調用,而無需調用Application.Run。是否可以在等待的線程上調用?
以下代碼顯示了我嘗試實現的內容,只是主線程和數據加載線程導致了死鎖。
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var form1 = new Form1();
form1.Show();
Thread loadDataThread = new Thread(() =>
{
//Load Data that takes a long time
string title = LoadData();
form1.Invoke((Action)delegate { form1.Text = title; });
});
loadDataThread.Name = "Data Loading Thread";
loadDataThread.Start();
//wait for loading to be completed (deadlock)
loadDataThread.Join();
//Do more stuffs
Application.Run();
}
private static string LoadData()
{
Thread.Sleep(1000);
return "Hello Thread";
}
}
謝謝
感謝您的示例。我很好奇其他人如何接近啓動畫面問題。我猜測最終最好是儘快釋放Main(UI)線程,以便其他線程可以通過invoke()與UI進行交互。 – dsum 2010-07-22 04:55:26
沒問題。如果這回答了您的問題,則應通過單擊複選標記將其標記爲已回答。 – Josh 2010-07-28 02:35:21
僅供參考:C#5.0 CTP將有新的語法調用「async」和「await」,這正是我正在尋找的解決上述問題的方法。希望它會使我的代碼更具可讀性,而不是具有所有這些回調。 – dsum 2010-11-22 19:31:49