1

これは、この他の質問に対する副次的な質問です: Silverlight ViewModel の BackgroundWorker

ユーザーがメニューオプションを選択すると、多くの TabItems をロードする TabControl があります。TabControl ItemsSource を ObservableCollection にバインドして、このタブをロードします。このコレクションに新しい TabItem を追加すると、完全に表示されます。

問題は、タブが作成されるまでユーザーがボタンを押すため (ViewModel とビューの作成には数秒かかる)、画面がフリーズすることに気付きました。

「loadTab」を呼び出す前に「IsBusy」を設定しようとしましたが、表示されません...非同期呼び出しでほとんどすべてを試しましたが、UI スレッドが使用中であり、作成時に例外がスローされます新しいタブ コントロール。

私が失っているトリックはありますか??? 何か案は???前もって感謝します。

4

1 に答える 1

1

この投稿を見たことがありますか?

http://www.dotnetspark.com/kb/3524-doesnt-your-friend-deserves-more-time.aspx

load イベントで重いものを回避し、すべてのリソースの読み込みが完了した後に Visible=true にすると役立ちます。その意味で、ユーザーがまだ準備ができていないものをクリックしたくなるのを防ぐことができます。

参考になるかわかりませんが、こんなアイデアはいかがですか?

public void DoStuff(Object values)
{
//your values object could be anything, 
//they might even be some objects from your form
//as long as you dont modify them in the other thread
imgLoading.Visible=true;
var client = new Proxy();
client.OnWorkCompletedAsync +=client_OnCompleted() ;
client.Work(values);
}

void client_OnCompletedAsync(object sender, EventArgs e)
{
    imgLoading.Visible=false;
    //now you can update the UI with other stuff
}
于 2012-11-23T13:17:02.433 に答える