これは、Windows ストア アプリ フォーラムでの私の質問の複製です。
Task を返す待機可能なメソッドがあります。決定を下すために指定された代理人を通過します。タスクは、いくつかのオブジェクトを繰り返し処理し、デリゲートを呼び出して、オブジェクトを処理する必要があるかどうかを判断します。従来の .NET では、次のように実装します。
private Task ProcessDemo(Func<int, bool> processDecisionHandler)
{
// Get the current SynchronizationContext
SynchronizationContext synchronizationContext = SynchronizationContext.Current;
return Task.Run(() =>
{
for (int i = 0; i < 10; i++)
{
// Invoke the process decision handler in the UI thread
bool process = false;
synchronizationContext.Send((state) => { process = processDecisionHandler(i); }, i);
if (process)
{
// Process the item
...
}
}
});
}
このメソッドは、次のように呼び出すことができます。
private async void testButton_Click(object sender, RoutedEventArgs e)
{
this.WriteLine("UI-Thread ({0})", Thread.CurrentThread.ManagedThreadId);
Func<int, bool> handler = (i) =>
{
if (MessageBox.Show("Process " + i + "?", this.Title, MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes)
{
return true;
}
else
{
return false;
}
};
await this.ProcessDemo(handler);
}
Windows ストア アプリでは、SynchronizationContext の Send メソッドが使用できないという問題に直面しています。ハンドラーの結果を「待つ」必要があるため、投稿は明らかに私の目標には機能しません。
Dispatcher (ライブラリコードにはありません) なしで、どうすれば目標を達成できますか?