diff --git a/src/Files.App/Helpers/ShareItemHelpers.cs b/src/Files.App/Helpers/ShareItemHelpers.cs index 564a238ec50f..4eabf538ad13 100644 --- a/src/Files.App/Helpers/ShareItemHelpers.cs +++ b/src/Files.App/Helpers/ShareItemHelpers.cs @@ -11,6 +11,9 @@ namespace Files.App.Helpers { public static class ShareItemHelpers { + private static DataTransferManager _dataTransferManager; + private static IEnumerable _itemsToShare; + public static bool IsItemShareable(ListedItem item) => !item.IsHiddenItem && (!item.IsShortcut || item.IsLinkItem) && @@ -21,14 +24,20 @@ public static async Task ShareItemsAsync(IEnumerable itemsToShare) if (itemsToShare is null) return; - var interop = DataTransferManager.As(); - IntPtr result = interop.GetForWindow(MainWindow.Instance.WindowHandle, Win32PInvoke.DataTransferManagerInteropIID); + _itemsToShare = itemsToShare; - var manager = WinRT.MarshalInterface.FromAbi(result); - manager.DataRequested += new TypedEventHandler(Manager_DataRequested); + if (_dataTransferManager == null) + { + var interop = DataTransferManager.As(); + IntPtr result = interop.GetForWindow(MainWindow.Instance.WindowHandle, Win32PInvoke.DataTransferManagerInteropIID); + _dataTransferManager = WinRT.MarshalInterface.FromAbi(result); + } + _dataTransferManager.DataRequested -= new TypedEventHandler(Manager_DataRequested); + _dataTransferManager.DataRequested += new TypedEventHandler(Manager_DataRequested); try { + var interop = DataTransferManager.As(); interop.ShowShareUIForWindow(MainWindow.Instance.WindowHandle); } catch (Exception ex) @@ -52,7 +61,7 @@ async void Manager_DataRequested(DataTransferManager sender, DataRequestedEventA List items = []; DataRequest dataRequest = args.Request; - foreach (ListedItem item in itemsToShare) + foreach (ListedItem item in _itemsToShare) { if (item is IShortcutItem shItem) {