我需要在紧凑的框架应用中实现线程来改善加载时间。我想触发一个后台线程来调用外部API,而主线程缓存一些表单。当后台线程完成后,我需要启动另外两个线程来填充数据缓存。
我需要后台线程能够执行回调方法所以我知道它已经完成并且可以启动接下来的两个线程,但是在紧凑框架中不支持委托上的BeginInvoke方法,所以我怎么能这样做?
答案 0 :(得分:3)
您可以自己安排,只需确保您的线程方法在完成后调用已完成的方法(或事件)。
由于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和Completed。使用<可能是有意义的。 T>对于国家财产,只是注意到了。
答案 1 :(得分:1)
我知道这是一个老问题,但是如果你使用的是CF 3.5,那么对于这个问题来说,这将是一个很好的解决方案。使用lambda委托..
ThreadStart starter = () => DoWorkMethodWithParams( param1, param2);
Thread myNewThread = new Thread(starter){IsBackground = true};
myNewThread.Start();