diff --git a/source/Cosmos.VS.DebugEngine/Cosmos.VS.DebugEngine.csproj b/source/Cosmos.VS.DebugEngine/Cosmos.VS.DebugEngine.csproj
index 8c980c75d..84391ed7e 100644
--- a/source/Cosmos.VS.DebugEngine/Cosmos.VS.DebugEngine.csproj
+++ b/source/Cosmos.VS.DebugEngine/Cosmos.VS.DebugEngine.csproj
@@ -26,8 +26,8 @@
-
-
+
+
diff --git a/source/Cosmos.VS.DebugEngine/CosmosDebugEnginePackage.cs b/source/Cosmos.VS.DebugEngine/CosmosDebugEnginePackage.cs
index 2bacf1811..e08eb6686 100644
--- a/source/Cosmos.VS.DebugEngine/CosmosDebugEnginePackage.cs
+++ b/source/Cosmos.VS.DebugEngine/CosmosDebugEnginePackage.cs
@@ -1,7 +1,9 @@
using System;
using System.Runtime.InteropServices;
+using System.Threading;
using Microsoft.VisualStudio.OLE.Interop;
using Microsoft.VisualStudio.Shell;
+using Task = System.Threading.Tasks.Task;
using Cosmos.VS.DebugEngine.Commands;
@@ -32,24 +34,30 @@ using Cosmos.VS.DebugEngine.Commands;
namespace Cosmos.VS.DebugEngine
{
[Guid(Guids.guidPackageString)]
- [PackageRegistration(UseManagedResourcesOnly = true)]
+ [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
[ProvideMenuResource("Menus.ctmenu", 1)]
- internal sealed class CosmosDebugEnginePackage : Package, IOleCommandTarget
+ internal sealed class CosmosDebugEnginePackage : AsyncPackage, IOleCommandTarget
{
private IOleCommandTarget packageCommandTarget;
private DebugCommandHandler packageCommandHandler;
- protected override void Initialize()
+ protected override async Task InitializeAsync(
+ CancellationToken cancellationToken,
+ IProgress progress)
{
- base.Initialize();
+ await base.InitializeAsync(cancellationToken, progress);
- packageCommandTarget = GetService(typeof(IOleCommandTarget)) as IOleCommandTarget;
+ await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
+
+ packageCommandTarget = await GetServiceAsync(typeof(IOleCommandTarget)).ConfigureAwait(true) as IOleCommandTarget;
packageCommandHandler = new DebugCommandHandler(this);
}
int IOleCommandTarget.Exec(ref Guid cmdGroup, uint nCmdID, uint nCmdExecOpt, IntPtr pvaIn, IntPtr pvaOut)
{
+ ThreadHelper.ThrowIfNotOnUIThread();
+
if (cmdGroup == Guids.DebugEngineCmdSetGuid)
{
return packageCommandHandler.Execute(nCmdID, nCmdExecOpt, pvaIn, pvaOut);
@@ -60,6 +68,8 @@ namespace Cosmos.VS.DebugEngine
int IOleCommandTarget.QueryStatus(ref Guid cmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
{
+ ThreadHelper.ThrowIfNotOnUIThread();
+
if (cmdGroup == Guids.DebugEngineCmdSetGuid)
{
return packageCommandHandler.Query(cCmds, prgCmds, pCmdText);
diff --git a/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj b/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj
index 3577ab1ed..3737c5edf 100644
--- a/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj
+++ b/source/Cosmos.VS.ProjectSystem/Cosmos.VS.ProjectSystem.csproj
@@ -62,12 +62,9 @@
-
-
-
-
+
diff --git a/source/Cosmos.VS.ProjectSystem/CosmosProjectSystemPackage.cs b/source/Cosmos.VS.ProjectSystem/CosmosProjectSystemPackage.cs
index 566609bfe..5429dc68c 100644
--- a/source/Cosmos.VS.ProjectSystem/CosmosProjectSystemPackage.cs
+++ b/source/Cosmos.VS.ProjectSystem/CosmosProjectSystemPackage.cs
@@ -1,18 +1,20 @@
using System;
using System.Runtime.InteropServices;
+using System.Threading;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
+using Task = System.Threading.Tasks.Task;
using Cosmos.VS.ProjectSystem.VS.PropertyPages;
namespace Cosmos.VS.ProjectSystem
{
[Guid(PackageGuid)]
- [PackageRegistration(UseManagedResourcesOnly = true)]
+ [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
[ProvideObject(typeof(OldCosmosPropertyPage))]
[ProvideObject(typeof(CosmosPropertyPage))]
[ProvideProjectFactory(typeof(MigrateCosmosProjectFactory), null, "Cosmos Project Files (*.Cosmos);*.Cosmos", "Cosmos", "Cosmos", null)]
- internal class CosmosProjectSystemPackage : Package
+ internal class CosmosProjectSystemPackage : AsyncPackage
{
///
/// The GUID for this package.
@@ -21,9 +23,13 @@ namespace Cosmos.VS.ProjectSystem
private IVsProjectFactory _factory;
- protected override void Initialize()
+ protected override async Task InitializeAsync(
+ CancellationToken cancellationToken,
+ IProgress progress)
{
- base.Initialize();
+ await base.InitializeAsync(cancellationToken, progress).ConfigureAwait(false);
+
+ await JoinableTaskFactory.SwitchToMainThreadAsync();
_factory = new MigrateCosmosProjectFactory();
RegisterProjectFactory(_factory);
diff --git a/source/Cosmos.VS.Windows/Cosmos.VS.Windows.csproj b/source/Cosmos.VS.Windows/Cosmos.VS.Windows.csproj
index 0d1c74e6a..73b6c4a0f 100644
--- a/source/Cosmos.VS.Windows/Cosmos.VS.Windows.csproj
+++ b/source/Cosmos.VS.Windows/Cosmos.VS.Windows.csproj
@@ -51,10 +51,7 @@
-
-
-
-
+
diff --git a/source/Cosmos.VS.Windows/CosmosWindowsPackage.cs b/source/Cosmos.VS.Windows/CosmosWindowsPackage.cs
index 329b506d5..cc59f0a56 100644
--- a/source/Cosmos.VS.Windows/CosmosWindowsPackage.cs
+++ b/source/Cosmos.VS.Windows/CosmosWindowsPackage.cs
@@ -2,11 +2,13 @@
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
-using System.Timers;
+using System.Threading;
using System.Windows.Threading;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
+using Task = System.Threading.Tasks.Task;
+using Timer = System.Timers.Timer;
using Cosmos.Debug.Common;
using Cosmos.Debug.DebugConnectors;
@@ -16,14 +18,14 @@ using Cosmos.VS.Windows.ToolWindows;
namespace Cosmos.VS.Windows
{
[Guid(Guids.PackageGuidString)]
- [PackageRegistration(UseManagedResourcesOnly = true)]
+ [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
[ProvideMenuResource("Menus.ctmenu", 1)]
[ProvideToolWindow(typeof(AssemblyToolWindow))]
[ProvideToolWindow(typeof(RegistersToolWindow))]
[ProvideToolWindow(typeof(StackTW))]
[ProvideToolWindow(typeof(InternalTW))]
[ProvideToolWindow(typeof(ConsoleTW))]
- public sealed class CosmosWindowsPackage: Package
+ public sealed class CosmosWindowsPackage: AsyncPackage
{
private readonly Queue mCommand;
private readonly Queue mMessage;
@@ -54,11 +56,15 @@ namespace Cosmos.VS.Windows
mPipeDown.Start();
}
- protected override void Initialize()
+ protected override async Task InitializeAsync(
+ CancellationToken cancellationToken,
+ IProgress progress)
{
- base.Initialize();
+ await base.InitializeAsync(cancellationToken, progress);
- var xOutputWindow = (IVsOutputWindow)GetService(typeof(SVsOutputWindow));
+ await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
+
+ var xOutputWindow = (IVsOutputWindow)await GetServiceAsync(typeof(SVsOutputWindow));
var xCosmosPaneGuid = Guid.NewGuid();
ErrorHandler.ThrowOnFailure(