Thread splashScreenThread = new Thread(new ParameterizedThreadStart(DisplaySplashScreen));
splashScreenThread.SetApartmentState(ApartmentState.STA);
splashScreenThread.IsBackground = true;
splashScreenThread.Start(moduleName);
Приведенный выше код после выполнения от 30 до 50 раз сбой OutOfMemoryException.Thread Start вызывает исключение OOM
Если я попробую splashScreenThread.Join, когда функция DisplaySplashScreen закрывается, приложение зависает.
UPDATE:
машина развития является 64 разрядной машиной и приложение под вопросом является 32 бит WPF приложения с помощью PRISM.
Каждый раз, когда открывается модуль, открывается окно всплеска. Когда модуль открывается, окно всплеска закрывается.
private void DisplaySplashScreen(object moduleName)
{
if (moduleName != null)
splashScreen = new SplashWindow(moduleName.ToString(), this.SplashScreenDescription);
else
splashScreen = new SplashWindow(string.Empty, string.Empty);
splashScreen.ShowDialog();
}
Примечание: SplashWindows является обычай окно, которое показано и закрывается позже автоматически.
запуска модуля загрузки и нагруженные конец FNS:
private void ModuleLoadingStart(object moduleName)
{
if (this.ModuleLoadingVisibility != Visibility.Visible)
{
this.ModuleLoadingVisibility = Visibility.Visible;
// Spawn off a new thread
Thread splashScreenThread = new Thread(new ParameterizedThreadStart(DisplaySplashScreen));
splashScreenThread.SetApartmentState(ApartmentState.STA);
splashScreenThread.IsBackground = true;
splashScreenThread.Start();
}
}
private void ModuleLoadingEnd()
{
if (this.ModuleLoadingVisibility != Visibility.Collapsed)
{
this.ModuleLoadingVisibility = Visibility.Collapsed;
while (true)
{
if (splashScreen == null)
Thread.Sleep(100);
else
break;
}
CloseSplashScreenDelegate myDel = new CloseSplashScreenDelegate(splashScreen.Close);
splashScreen.Dispatcher.Invoke(myDel, null);
}
}
Что я здесь отсутствует?
Сколько потоков выполняется в вашем приложении во время исключения? и какова память, занятая этим процессом? –
Я бы сказал, что вам, вероятно, нужно отправить код в 'DisplaySplashScreen', так как могут быть утечки памяти в этом методе – user1
Невозможно сказать из опубликованного кода, но вам, вероятно, не хватает эквивалента [этого] (http: // referencesource.microsoft.com/#WindowsBase/Base/System/Windows/SplashScreen.cs,57538949b88b042f). –