Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit fc48386

Browse files
committed
Init
1 parent 2303e6c commit fc48386

File tree

3 files changed

+33
-80
lines changed

3 files changed

+33
-80
lines changed

‎src/Files.App.Storage/Storables/WindowsStorage/STATask.cs‎

Lines changed: 31 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -147,57 +147,43 @@ public static Task Run(Func<Task> func)
147147
return tcs.Task;
148148
}
149149

150-
public static Task<T?> RunAsSync<T>(Func<Task<T>>func)
150+
public unsafestatic Task RunAsSync(Actionaction)
151151
{
152-
HANDLEhEventHandle=default;
152+
Debug.Assert(Thread.CurrentThread.GetApartmentState()isApartmentState.STA);
153153

154-
unsafe
155-
{
156-
hEventHandle = PInvoke.CreateEvent((SECURITY_ATTRIBUTES*)null, true, false, default);
157-
}
154+
HANDLE hEventHandle = PInvoke.CreateEvent((SECURITY_ATTRIBUTES*)null, true, false, default);
158155

159-
var tcs = new TaskCompletionSource<T?>();
156+
var tcs = new TaskCompletionSource();
160157

161-
Thread thread =
162-
new(async () =>
158+
Task.Run(() =>
159+
{
160+
try
163161
{
164-
PInvoke.OleInitialize();
165-
166-
try
167-
{
168-
tcs.SetResult(await func());
169-
}
170-
catch (Exception ex)
171-
{
172-
tcs.SetException(ex);
173-
}
174-
finally
175-
{
176-
PInvoke.SetEvent(hEventHandle);
177-
PInvoke.OleUninitialize();
178-
}
179-
})
162+
action();
163+
tcs.SetResult();
164+
}
165+
catch (Exception ex)
180166
{
181-
IsBackground=true,
182-
Priority=ThreadPriority.Normal
183-
};
184-
185-
thread.SetApartmentState(ApartmentState.STA);
186-
thread.Start();
187-
188-
unsafe
189-
{
190-
HANDLE*pEventHandles = stackallocHANDLE[1];
191-
pEventHandles[0]=hEventHandle;
192-
uintdwIndex=0u;
193-
194-
PInvoke.CoWaitForMultipleObjects(
195-
(uint)CWMO_FLAGS.CWMO_DEFAULT,
196-
PInvoke.INFINITE,
197-
1u,
198-
pEventHandles,
199-
&dwIndex);
200-
}
167+
tcs.SetException(ex);
168+
}
169+
finally
170+
{
171+
PInvoke.SetEvent(hEventHandle);
172+
}
173+
});
174+
175+
HANDLE*pEventHandles=stackallocHANDLE[1];
176+
pEventHandles[0] = hEventHandle;
177+
uintdwIndex=0u;
178+
179+
PInvoke.CoWaitForMultipleObjects(
180+
(uint)CWMO_FLAGS.CWMO_DEFAULT,
181+
PInvoke.INFINITE,
182+
1u,
183+
pEventHandles,
184+
&dwIndex);
185+
186+
PInvoke.CloseHandle(hEventHandle);
201187

202188
return tcs.Task;
203189
}

‎src/Files.App/Helpers/Win32/Win32PInvoke.Methods.cs‎

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,6 @@ public static extern bool SetEvent(
6969
IntPtr hEvent
7070
);
7171

72-
[DllImport("ole32.dll")]
73-
public static extern uint CoWaitForMultipleObjects(
74-
uint dwFlags,
75-
uint dwMilliseconds,
76-
ulong nHandles,
77-
IntPtr[] pHandles,
78-
out uint dwIndex
79-
);
80-
8172
[DllImport("shell32.dll")]
8273
public static extern IntPtr SHBrowseForFolder(
8374
ref BROWSEINFO lpbi

‎src/Files.App/Program.cs‎

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using System.Text;
1010
using Windows.ApplicationModel.Activation;
1111
using Windows.Storage;
12-
using static Files.App.Helpers.Win32PInvoke;
1312

1413
namespace Files.App
1514
{
@@ -21,9 +20,6 @@ namespace Files.App
2120
/// </remarks>
2221
internal sealed class Program
2322
{
24-
private const uint CWMO_DEFAULT = 0;
25-
private const uint INFINITE = 0xFFFFFFFF;
26-
2723
public static Semaphore? Pool { get; set; }
2824

2925
static Program()
@@ -250,20 +246,10 @@ private static async void OnActivated(object? sender, AppActivationArguments arg
250246
/// </remarks>
251247
public static void RedirectActivationTo(AppInstance keyInstance, AppActivationArguments args)
252248
{
253-
IntPtr eventHandle = CreateEvent(IntPtr.Zero, true, false, null);
254-
255-
Task.Run(() =>
249+
STATask.RunAsSync(() =>
256250
{
257251
keyInstance.RedirectActivationToAsync(args).AsTask().Wait();
258-
SetEvent(eventHandle);
259252
});
260-
261-
_ = CoWaitForMultipleObjects(
262-
CWMO_DEFAULT,
263-
INFINITE,
264-
1,
265-
[eventHandle],
266-
out uint handleIndex);
267253
}
268254

269255
public static void OpenShellCommandInExplorer(string shellCommand, int pid)
@@ -273,20 +259,10 @@ public static void OpenShellCommandInExplorer(string shellCommand, int pid)
273259

274260
public static void OpenFileFromTile(string filePath)
275261
{
276-
IntPtr eventHandle = CreateEvent(IntPtr.Zero, true, false, null);
277-
278-
Task.Run(() =>
262+
STATask.RunAsSync(() =>
279263
{
280264
LaunchHelper.LaunchAppAsync(filePath, null, null).Wait();
281-
SetEvent(eventHandle);
282265
});
283-
284-
_ = CoWaitForMultipleObjects(
285-
CWMO_DEFAULT,
286-
INFINITE,
287-
1,
288-
[eventHandle],
289-
out uint handleIndex);
290266
}
291267
}
292268
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /