日期:2014-05-19  浏览次数:20773 次

已经放入了子线程执行,为什么还会导致UI线程假死?
//一个串口设备的二次开发接口
API   api   =   new   API();

//载入
private   void   main_load()
{
    Thread   a   =   new   Thread(new   ThreadStart(ThreadInit));
    a.Start();
}

//线程执行体
private   void   api_init()
{
    //二次接口的初始化,需要5秒左右的初始化时间
    api.init();
}

//线程入口
private   void   ThreadInit()
{
    api_init();
}

===============================

如上面所示,api.init()方法需要占用5秒左右的时间。为了避免主程序UI线程假死,我把它的初始化放入到了线程去执行。可是依然会假死。我是不是哪里做错了呢?请各位大师帮忙解答,感激不尽。

------解决方案--------------------
用委托异步操作,执行了就立即返回做下面的,前面的事不用管的

MethodInvoker pMethodInvoker = new MethodInvoker(ThreadInit);
pMethodInvoker.BeginInvoke(null, null);
------解决方案--------------------
try

Thread a = new Thread(new ThreadStart(ThreadInit));
a.IsBackground = true;
a..Start();


private void ThreadInit()
{
MethodInvoker mi = new MethodInvoker(api_init);
this.BeginInvoke(mi);
}

private void api_init()
{
//二次接口的初始化,需要5秒左右的初始化时间
api.init();//
}