diff --git a/osu.Game/Screens/BackgroundScreen.cs b/osu.Game/Screens/BackgroundScreen.cs
index 5e9863f642..61277439c1 100644
--- a/osu.Game/Screens/BackgroundScreen.cs
+++ b/osu.Game/Screens/BackgroundScreen.cs
@@ -37,10 +37,17 @@ namespace osu.Game.Screens
}
// Make sure the in-progress loading is complete before pushing the screen.
- while (screen.LoadState < LoadState.Ready)
+ while (screen.LoadState != LoadState.Ready)
Thread.Sleep(1);
- base.Push(screen);
+ try
+ {
+ base.Push(screen);
+ }
+ catch (InvalidOperationException)
+ {
+ // screen may have exited before the push was successful.
+ }
}
protected override void Update()
diff --git a/osu.Game/Screens/OsuScreen.cs b/osu.Game/Screens/OsuScreen.cs
index 61018f9e08..865b4c9070 100644
--- a/osu.Game/Screens/OsuScreen.cs
+++ b/osu.Game/Screens/OsuScreen.cs
@@ -195,11 +195,10 @@ namespace osu.Game.Screens
if (Background != null && !Background.Equals(nextOsu?.Background))
{
- if (nextOsu != null)
- //We need to use MakeCurrent in case we are jumping up multiple game screens.
- nextOsu.Background?.MakeCurrent();
- else
- Background.Exit();
+ Background.Exit();
+
+ //We need to use MakeCurrent in case we are jumping up multiple game screens.
+ nextOsu?.Background?.MakeCurrent();
}
if (base.OnExiting(next))
diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj
index f0bc330994..21ba229543 100644
--- a/osu.Game/osu.Game.csproj
+++ b/osu.Game/osu.Game.csproj
@@ -18,7 +18,7 @@
-
+