我有一种情况,我希望主线程在等待,而其他线程可以在主线程上调用,而无需调用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