diff --git a/Desktop.Core/Services/CasterSocket.cs b/Desktop.Core/Services/CasterSocket.cs index 18f41934..03f983d9 100644 --- a/Desktop.Core/Services/CasterSocket.cs +++ b/Desktop.Core/Services/CasterSocket.cs @@ -220,14 +220,12 @@ namespace Remotely.Desktop.Core.Services } } - _ = Task.Run(() => { - ScreenCaster.BeginScreenCasting(new ScreenCastRequest() - { - NotifyUser = notifyUser, - ViewerID = viewerID, - RequesterName = requesterName, - UseWebRtc = useWebRtc - }); + ScreenCaster.BeginScreenCasting(new ScreenCastRequest() + { + NotifyUser = notifyUser, + ViewerID = viewerID, + RequesterName = requesterName, + UseWebRtc = useWebRtc }); } catch (Exception ex) diff --git a/Desktop.Core/Services/ScreenCaster.cs b/Desktop.Core/Services/ScreenCaster.cs index f2009aec..646610b4 100644 --- a/Desktop.Core/Services/ScreenCaster.cs +++ b/Desktop.Core/Services/ScreenCaster.cs @@ -25,7 +25,6 @@ namespace Remotely.Desktop.Core.Services public class ScreenCaster : IScreenCaster { - private readonly ConcurrentDictionary _castingThreads = new(); private readonly Conductor _conductor; private readonly ICursorIconWatcher _cursorIconWatcher; private readonly ISessionIndicator _sessionIndicator; @@ -45,13 +44,7 @@ namespace Remotely.Desktop.Core.Services public void BeginScreenCasting(ScreenCastRequest screenCastRequest) { - var castingThread = new Thread(async () => - { - await CastScreen(screenCastRequest); - }); - castingThread.SetApartmentState(ApartmentState.STA); - _castingThreads.AddOrUpdate(screenCastRequest.ViewerID, castingThread, (k, v) => castingThread); - castingThread.Start(); + _ = Task.Run(async () => await CastScreen(screenCastRequest)); } private async Task CastScreen(ScreenCastRequest screenCastRequest) @@ -215,7 +208,6 @@ namespace Remotely.Desktop.Core.Services Logger.Write("No more viewers. Calling shutdown service."); await _shutdownService.Shutdown(); } - _castingThreads.TryRemove(screenCastRequest.ViewerID, out _); } } diff --git a/Desktop.Win/ViewModels/MainWindowViewModel.cs b/Desktop.Win/ViewModels/MainWindowViewModel.cs index 3b2560fc..8f2b01a8 100644 --- a/Desktop.Win/ViewModels/MainWindowViewModel.cs +++ b/Desktop.Win/ViewModels/MainWindowViewModel.cs @@ -315,26 +315,19 @@ namespace Remotely.Desktop.Win.ViewModels } } - private void ScreenCastRequested(object sender, ScreenCastRequest screenCastRequest) + private async void ScreenCastRequested(object sender, ScreenCastRequest screenCastRequest) { - App.Current.Dispatcher.Invoke(() => + await App.Current.Dispatcher.InvokeAsync(async () => { App.Current.MainWindow.Activate(); var result = MessageBox.Show(Application.Current.MainWindow, $"You've received a connection request from {screenCastRequest.RequesterName}. Accept?", "Connection Request", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { - Task.Run(() => - { - Services.GetRequiredService().BeginScreenCasting(screenCastRequest); - }); + Services.GetRequiredService().BeginScreenCasting(screenCastRequest); } else { - // Run on another thread so it doesn't tie up the UI thread. - Task.Run(async () => - { - await _casterSocket.SendConnectionRequestDenied(screenCastRequest.ViewerID); - }); + await _casterSocket.SendConnectionRequestDenied(screenCastRequest.ViewerID); } }); } diff --git a/Desktop.XPlat/App.xaml.cs b/Desktop.XPlat/App.xaml.cs index f90f2bf9..c51c2b33 100644 --- a/Desktop.XPlat/App.xaml.cs +++ b/Desktop.XPlat/App.xaml.cs @@ -20,7 +20,6 @@ namespace Remotely.Desktop.XPlat { public class App : Application { - private static Conductor Conductor; private static IServiceProvider Services => ServiceContainer.Instance; public override void Initialize() @@ -96,24 +95,24 @@ namespace Remotely.Desktop.XPlat BuildServices(); - Conductor = Services.GetRequiredService(); + var conductor = Services.GetRequiredService(); var args = Environment.GetCommandLineArgs().SkipWhile(x => !x.StartsWith("-")); Logger.Write("Processing Args: " + string.Join(", ", args)); - Conductor.ProcessArgs(args.ToArray()); + conductor.ProcessArgs(args.ToArray()); await Services.GetRequiredService().GetInitParams(); - if (Conductor.Mode == Core.Enums.AppMode.Chat) + if (conductor.Mode == Core.Enums.AppMode.Chat) { - await Services.GetRequiredService().StartChat(Conductor.RequesterID, Conductor.OrganizationName); + await Services.GetRequiredService().StartChat(conductor.RequesterID, conductor.OrganizationName); } - else if (Conductor.Mode == Core.Enums.AppMode.Unattended) + else if (conductor.Mode == Core.Enums.AppMode.Unattended) { var casterSocket = Services.GetRequiredService(); - await casterSocket.Connect(Conductor.Host).ConfigureAwait(false); - await casterSocket.SendDeviceInfo(Conductor.ServiceID, Environment.MachineName, Conductor.DeviceID).ConfigureAwait(false); - await casterSocket.NotifyRequesterUnattendedReady(Conductor.RequesterID).ConfigureAwait(false); + await casterSocket.Connect(conductor.Host).ConfigureAwait(false); + await casterSocket.SendDeviceInfo(conductor.ServiceID, Environment.MachineName, conductor.DeviceID).ConfigureAwait(false); + await casterSocket.NotifyRequesterUnattendedReady(conductor.RequesterID).ConfigureAwait(false); Services.GetRequiredService().Start(); Services.GetRequiredService().BeginWatching(); Services.GetRequiredService().Init(); diff --git a/Desktop.XPlat/ViewModels/MainWindowViewModel.cs b/Desktop.XPlat/ViewModels/MainWindowViewModel.cs index 8709a5ed..f6d58dea 100644 --- a/Desktop.XPlat/ViewModels/MainWindowViewModel.cs +++ b/Desktop.XPlat/ViewModels/MainWindowViewModel.cs @@ -284,10 +284,7 @@ namespace Remotely.Desktop.XPlat.ViewModels var result = await MessageBox.Show($"You've received a connection request from {screenCastRequest.RequesterName}. Accept?", "Connection Request", MessageBoxType.YesNo); if (result == MessageBoxResult.Yes) { - _ = Task.Run(() => - { - Services.GetRequiredService().BeginScreenCasting(screenCastRequest); - }); + Services.GetRequiredService().BeginScreenCasting(screenCastRequest); } }); }