私が正しく理解しているのであれば、ボタンをクリックしたときに非同期操作を実行できるようにしたいのですが、ワーカースレッドとして参照する特定のスレッドで実行することができます。
ファースト - リソースを2つのスレッドで使用する場合は、unique_ptr
を使用しないでください.2つのスレッド間でこのリソースを共有するため、shared_ptr
を使用してください。
第2に、特定のスレッドでアクションを実行する必要がない場合は、単にWindows::System::Threading::ThreadPool::RunAsyncを使用し、値でshared_ptr
をキャプチャするだけです。
は、例えば:あなたが特定のスレッドで操作を実行しなければならない場合に
namespace WST = Windows::System::Threading;
WST::ThreadPool::RunAsync(
ref new WST::WorkItemHandler(
[mySharedPtr](Windows::Foundation::IAsyncAction^ operation)
{
mySharedPtr->Foo();
}));
が、私はそうあなたがスレッドを作成している、あなたはすでに実行中のスレッドに操作を追加できるようにしたいと仮定し、上記の例を使用することができます。 したがって、既に実行中のスレッドに操作を追加するには、そのスレッドに新しい操作を取得して、その操作を同期した順序で実行する機能が必要です。この機能は基本的にDispatcherが提供する機能です。これは、メッセージディスパッチャ、メッセージループ、メッセージポンプ、または実行ループとも呼ばれるEvent Loopです。また、Recator \ Proactorデザインパターンを読んで情報を見つけることもできます。
This CodeProjectページには、パターンを実装する1つの方法を示しており、あなたが
より身近よりconveniantの\ \それを改善するためにWinRTのコンポーネントを使用することができますUIスレッドが特別である、それは[生産者 - 消費者を解決し、ディスパッチャを持っています問題](https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem)。これにより、そのスレッドでコードを実行することができます。ワーカースレッド上でこれを実行したい場合は、同じ問題を解決する必要があります。スレッドセーフなキューが必要です。 –