Я пытаюсь предварительно загрузить сборки в фоновом потоке, и кажется, что когда вызывается функция PreLoadAssemblies, ничего не происходит и, как поток мертв или что-то еще (но я вижу поток в списке потоков).Когда я запускаю код в однопоточной среде, он работает нормально.
Здесь я создаю фоновый вызов:
BackgroundWorker backgroundWorker = new BackgroundWorker();
//[Threaded]
private void InitlaizePoint()
{
backgroundWorker.DoWork += new DoWorkEventHandler(BackgroundInitalization);
backgroundWorker.RunWorkerAsync();
}
Вот функция фоновой инициализации.Он останавливается (имеется в виду, что ничего не происходит, и я вижу, что мой индикатор выполнения диалогового окна работает «на пустом») после того, как я пытаюсь выполнить пошаговое выполнение PReLoadAssemblies.1009 *
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;
}
Дайте мне знать, если у вас есть идеи.
Спасибо