4

問題は、長時間の操作ゲッターを UI コントロールにバインドすることです。たとえば、次のようなプロパティがあるとします。

public string ButtonText
{
    get
    {
        Task.Delay(3000).Wait();
        return _buttonText;
    }
    set
    {
        _buttonText = value;
    }
}

XAML で UI コントロールにバインドしContent="{Binding ButtonText}"ます。UI スレッドはブロックされます。Binding.IsAsyncWPF にはバックグラウンドでバインドされたデータをロードできるプロパティがありますが、Metro フレームワークにはそのようなプロパティはありません。

メトロアプリケーションで非同期バインディングを作成する方法について誰か考えがありますか?

4

1 に答える 1

-1

Microsoft は意図的にこのような一連の変更を行い、プロパティを非同期で取得する必要があるようなことをプロパティ ゲッター/セッターで行わないようにしています。UI スレッドをブロックしない「新しい」方法はawait Task.Delay(3000)、を使用する代わりに次のようなことを行うことBinding.IsAsyncです。 await実行をブロックしますが、スレッドはブロックしません(まさにあなたがやろうとしていることです)。

await.NET 4.5 での C# のキーワードの詳細については、次のページを参照してください。ページの下部にある例は、コードがどのように見えるべきかをよく示しています。

http://msdn.microsoft.com/en-us/library/hh156528.aspx

于 2012-10-08T21:29:08.227 に答える