我試圖預加載組件在後臺線程,似乎當PreLoadAssemblies函數被調用沒有發生而像線程是死或某事(但我確實看到螺紋螺紋列表)。當我在單線程環境下運行代碼時,它工作正常。的BackgroundWorker不會被調用
這裏就是我創建背景呼叫:
BackgroundWorker backgroundWorker = new BackgroundWorker();
//[Threaded]
private void InitlaizePoint()
{
backgroundWorker.DoWork += new DoWorkEventHandler(BackgroundInitalization);
backgroundWorker.RunWorkerAsync();
}
這裏是後臺初始化函數。它停下來(意思是什麼都沒有發生,我試着介紹PReLoadAssemblies後,我看到我的對話窗口進度條在「空」運行)。
private void BackgroundInitalization(object sender, DoWorkEventArgs e)
{
try
{
PreLoadAssemblies();
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
這裏是preloadassemblies的樣子:
private static void PreLoadAssemblies()
{
//statusController.PublishStatus("pre-loading assemblies");
var missingAssemblies = new ArrayList();
var loadedAssemblies = new ArrayList();
LoadDependencies(Assembly.GetExecutingAssembly().GetName(), missingAssemblies, loadedAssemblies);
}
private static void LoadDependencies(AssemblyName name, ArrayList missingAssemblies, ArrayList loadedAssemblies)
{
try
{
//statusController.PublishStatus("Loading dependencies");
Assembly a = Assembly.Load(name);
loadedAssemblies.Add(name.FullName);
foreach (AssemblyName depends in a.GetReferencedAssemblies())
{
if (!IsAssemblyLoaded(depends.FullName, loadedAssemblies))
LoadDependencies(depends, missingAssemblies, loadedAssemblies);
}
}
catch (Exception)
{
missingAssemblies.Add(name);
}
}
private static bool IsAssemblyLoaded(String name, ArrayList preloadedAssemblies)
{
if (preloadedAssemblies.IndexOf(name) == -1)
return false;
return true;
}
讓我知道如果你有任何想法。
謝謝
什麼是PreLoadAssemblies方法? – SLaks 2010-11-02 15:02:07
有兩個問題:您是否檢查過InitlaizePoint方法是否曾被調用過?您是否在DoWork方法的try線上放置了斷點以確保DoWork方法完全被調用?設置本身看起來不錯。 – 2010-11-02 15:03:06
預加載組裝基本上是將所有引用的組件加載到內存中。 – 2010-11-02 15:24:49