我需要实现线程来提高紧凑框架应用程序中的加载时间。我想引发后台线程来对外部API进行一些调用,而主线程缓存一些表单。当后台线程完成后,我需要再关闭两个线程来填充数据缓存。紧凑框架上线程的AsyncCallback
我需要后台线程才能执行回调方法,所以我知道它已经完成,接下来的两个线程可以启动,但紧凑框架中不支持代理上的BeginInvoke方法,那么还有什么可以我这样做?
我需要实现线程来提高紧凑框架应用程序中的加载时间。我想引发后台线程来对外部API进行一些调用,而主线程缓存一些表单。当后台线程完成后,我需要再关闭两个线程来填充数据缓存。紧凑框架上线程的AsyncCallback
我需要后台线程才能执行回调方法,所以我知道它已经完成,接下来的两个线程可以启动,但紧凑框架中不支持代理上的BeginInvoke方法,那么还有什么可以我这样做?
您可以自己安排它,只要确保您的线程方法在完成时调用完成的方法(或事件)即可。
既然CF不支持ParameterizedThreadStart,我曾经做过一个小助手类。
以下是摘录,并没有重新测试:
//untested
public abstract class BgHelper
{
public System.Exception Error { get; private set; }
public System.Object State { get; private set; }
public void RunMe(object state)
{
this.State = state;
this.Error = null;
ThreadStart starter = new ThreadStart(Run);
Thread t = new Thread(starter);
t.Start();
}
private void Run()
{
try
{
DoWork();
}
catch (Exception ex)
{
Error = ex;
}
Completed(); // should check Error first
}
protected abstract void DoWork() ;
protected abstract void Completed();
}
您需要继承和实施的DoWork和完成。对于State属性使用T> <可能是有意义的,只是注意到了这一点。
我知道这是一个老问题,但如果你使用CF 3.5这将是一个很好的解决问题的简短方法。使用拉姆达代表..
ThreadStart starter =() => DoWorkMethodWithParams(param1, param2);
Thread myNewThread = new Thread(starter){IsBackground = true};
myNewThread.Start();
这可以吗?我不是线程专家,但是我担心从线程中产生新线程,而这肯定会发生在这里? – Charlie 2009-06-30 12:19:37
是的,但没有什么特别的关于开始线程形式的线程。你的主线程也是一个线程。 – 2009-06-30 12:22:39