我在運行時運行一些腳本,但它凍結了我的UI,我在線程中調用CodeProvider,但它仍然凍結。如何等待線程退出該線程而不凍結我的APP?
在我的形式我打電話:
var mre = new ManualResetEvent(false);
Thread tr = new Thread(() =>
{
Script sp = new Script();
code = textBox.Text;
sp.Comp(code);
mre.Set();
});
tr.Start();
mre.WaitOne();
我使用mre.WaitOne()
因爲我想等待線程完成繼續運行我的代碼。
嘗試使用編譯方法裏面也以同樣的方式:
public bool Comps(string code)
{
var mre = new ManualResetEvent(false);
Thread tr = new Thread(() =>
{
//Code to generate a CompilerResult and generate the assembly
Run();
mre.Set();
});
tr.Start();
mre.WaitOne();
return true;
}
但是,儘管它在等待它仍然凍結UI。
任何想法?
感謝
如果您的應用程序基於WPF,[這](http://msdn.microsoft.com/en-us/magazine/cc163328.aspx)應該是相關的。 – sovanesyan 2012-03-01 21:56:05
你的'mre.Set();'在線程的最後。這意味着'mre.WaitOne();'與'tr.Join();'相同,這意味着整個事物基本上是單線程的。 – 2012-03-01 22:12:56