Fixed some kernel/splash screen async startup issues

This commit is contained in:
LukePulverenti Luke Pulverenti luke pulverenti 2012-08-19 18:35:45 -04:00
parent 87245d11fc
commit 3586c54e90
5 changed files with 57 additions and 49 deletions

View File

@ -65,6 +65,8 @@ namespace MediaBrowser.Controller
}
public async override Task Init(IProgress<TaskProgress> progress)
{
await Task.Run(async () =>
{
await base.Init(progress);
@ -75,6 +77,7 @@ namespace MediaBrowser.Controller
await ReloadRoot();
progress.Report(new TaskProgress() { Description = "Loading Complete", PercentComplete = 100 });
});
}
protected override void OnComposablePartsLoaded()

View File

@ -1,7 +1,6 @@
<Application x:Class="MediaBrowser.ServerApplication.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
</Application.Resources>

View File

@ -1,8 +1,12 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Windows;
using MediaBrowser.Common.Logging;
using MediaBrowser.Common.UI;
using MediaBrowser.Controller;
using MediaBrowser.Model.Progress;
using Microsoft.Shell;
namespace MediaBrowser.ServerApplication
@ -21,12 +25,50 @@ namespace MediaBrowser.ServerApplication
{
var application = new App();
application.InitializeComponent();
application.Run();
// Allow single instance code to perform cleanup operations
SingleInstance<App>.Cleanup();
}
}
protected async override void OnStartup(StartupEventArgs e)
{
this.ShutdownMode = ShutdownMode.OnExplicitShutdown;
await LoadKernel();
}
private async Task LoadKernel()
{
Progress<TaskProgress> progress = new Progress<TaskProgress>();
Splash splash = new Splash(progress);
splash.Show();
try
{
DateTime now = DateTime.Now;
await new Kernel().Init(progress);
double seconds = (DateTime.Now - now).TotalSeconds;
Logger.LogInfo("Kernel.Init completed in {0} seconds.", seconds);
splash.Close();
this.ShutdownMode = System.Windows.ShutdownMode.OnLastWindowClose;
new MainWindow().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show("There was an error launching Media Browser Server: " + ex.Message);
splash.Close();
Shutdown(1);
}
}
#region ISingleInstanceApp Members
public bool SignalExternalCommandLineArgs(IList<string> args)
{

View File

@ -4,7 +4,7 @@
xmlns:tb="http://www.hardcodet.net/taskbar"
Title="MainWindow" Height="350" Width="525" AllowsTransparency="True" Background="Transparent" WindowStyle="None" ShowInTaskbar="False">
<Grid>
<tb:TaskbarIcon Name="MbTaskbarIcon" IconSource="/Icons/Icon.ico" ToolTipText="MediaBrowser Server" Visibility="Hidden">
<tb:TaskbarIcon Name="MbTaskbarIcon" IconSource="/Icons/Icon.ico" ToolTipText="MediaBrowser Server">
<tb:TaskbarIcon.ContextMenu>
<ContextMenu Background="White">

View File

@ -1,10 +1,5 @@
using System;
using System.Diagnostics;
using System.Diagnostics;
using System.Windows;
using MediaBrowser.Common.Logging;
using MediaBrowser.Common.UI;
using MediaBrowser.Controller;
using MediaBrowser.Model.Progress;
namespace MediaBrowser.ServerApplication
{
@ -16,38 +11,7 @@ namespace MediaBrowser.ServerApplication
public MainWindow()
{
InitializeComponent();
LoadKernel();
}
private async void LoadKernel()
{
Progress<TaskProgress> progress = new Progress<TaskProgress>();
Splash splash = new Splash(progress);
splash.Show();
try
{
DateTime now = DateTime.Now;
await new Kernel().Init(progress);
double seconds = (DateTime.Now - now).TotalSeconds;
Logger.LogInfo("Kernel.Init completed in {0} seconds.", seconds);
// Don't show the system tray icon until the kernel finishes.
this.MbTaskbarIcon.Visibility = System.Windows.Visibility.Visible;
}
catch (Exception ex)
{
MessageBox.Show("There was an error launching Media Browser Server: " + ex.Message);
Close();
}
finally
{
splash.Close();
}
//LoadKernel();
}
#region Context Menu events
@ -66,7 +30,7 @@ namespace MediaBrowser.ServerApplication
private void cmExit_click(object sender, RoutedEventArgs e)
{
this.Close();
Close();
}
#endregion