我试图预加载组件在后台线程,似乎当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