我需要實現線程來提高緊湊框架應用程序中的加載時間。我想引發後臺線程來對外部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