WPFウィザードコントロールにオーバーレイをロードする必要があります。 wpf extendedtitlitからbusyIndicatorツールを使用しています。非同期待機を使用するWPF WizardControlのカスタムビジーオーバーレイ
async awaitのコードは動作しますが、GUIスレッドはロックされます。待ち受けているときにメッセージを待ちます。
private async void Button1_Click(object sender, RoutedEventArgs e)
{
BusyIndicator.IsBusy = true;
BusyIndicator.IsEnabled = true;
BusyIndicator.BusyContent = "Please wait while Site is provisioned";
await Task.Run(() =>
{
LongRunningFunction();
});
BusyIndicator.IsBusy=false;
}
BusyIndicatorのXAMLは次のとおりです。
<xctk:BusyIndicator x:Name="BusyIndicator" IsBusy="False" BusyContent="Please Wait">
</xctk:BusyIndicator>
LonRunningFunctionはUIを更新しないWebサービスの呼び出しのみブール値を返している
public static bool LongRunningFunction(string URL)
{
bool IsPresent = CallWebservice()
return IsPresent;
}
BusyIndicator代わりに非同期呼び出しの前に発射していないよう )発行LongRunningタスクが完了したときに火災のように見える
2)asyncとawaitが使用されているときにguiオーバーレイを呼び出す正しいプロセスは何ですか?
あなたはawaitの代わりに 'ThreadPool'を使ってみましたか?問題は、そのlongRunningTask内のUI要素を操作する場合、ディスパッチャーを使用する必要があることです。[Here](http://stackoverflow.com/a/37483878/2029607)は、コードでどのように使用できるかを示しています。 – XAMlMAX
@XAMlMAX He *は*スレッドプールを使用しています。 'Task.Run'は、スレッドプールスレッドの作業をスケジュールします。 – Servy
'LongRunningFunction'を見ることなく、なぜコードが動作していないのかを知る方法がありません。明らかにそれは何かしているべきではありませんが、何を知るかは分かりません。 – Servy