标签:
佐左佑右 原文 C#主线程等待子线程运行结束
由于主程序中调用matlab的dll文件进行计算要用较长的时间,主界面会有很长时间的卡顿,造成的用户感受十分不好,因此我想在调用时,将调用放入子线程中,然后在主线程中弹出一个提示框,显示数据正在加载,等子线程运行结束后,主线程继续工作。
using System.Threading;
namespace ThreadStudy { class StopAllWaitBySubThread { List manualEvents = new List(); public void Main() { ManualResetEvent mre = new ManualResetEvent(false); manualEvents.Add(mre); ThreadPool.QueueUserWorkItem(ThreadMethod, mre); Form f = Application.OpenForms["Form_CreateObject"];//查找是否打开过窗体 if (f == null) //没打开过 ,打开 { Form_CreateObject datamanage = new Form_CreateObject(); datamanage.Show(); } else { f.Focus(); //打开过就让其获得焦点 } WaitHandle.WaitAll(manualEvents.ToArray());//程序会在此处暂停,等待子线程运行结束。 f = Application.OpenForms["Form_CreateObject"];//查找是否打开过窗体 if (f == null) //没打开过 {
} else { f.Close(); //打开过就关掉 } } private void ThreadMethod(object obj) { //耗时的函数,处理事情,Matlab Matlab(); ManualResetEvent mre = (ManualResetEvent)obj; mre.Set(); Console.WriteLine("Thread execute"); } } }
标签:
原文地址:http://www.cnblogs.com/arxive/p/5958123.html