私はスレッドで作業するのはかなり新しいです。私はセッターにあなたが(メソッドを呼び出すときには、引数を提供して)SendOrPostCallbackを使用する必要があること、ハードな方法を実現マルチスレッド環境でSendOrPostCallbackとActionの違いはありますか?
public States State
{
get { return (States)GetValue(StateProperty); }
set
{
Dispatcher.BeginInvoke(DispatcherPriority.Background,
//(SendOrPostCallback)delegate { SetValue(StateProperty, value); }, //works
(Action)(()=> SetValue(StateProperty, value)), //doesnt
value);
}
}
public static readonly DependencyProperty StateProperty =
DependencyProperty.Register("State", typeof(States), typeof(FTPDownload), new UIPropertyMetadata(States.Idle));
:私はDependencyProperty
の値を設定しようとしていました。それはActionで動作しません(引数がないためwpfは実際には問題です、デバッグし、 "ソースが利用できません"と何も手がかりがない)。
なぜ私はそこSendOrPostCallbackを使用する必要があり、どのように私は実際にセッターを呼び出すと経由して動作するので、この場合には、これは正しいものであることを知っている必要があります。??
Dispatcher.BeginInvoke((Action)(()=>State=States.Updating), null);
とSendOrPostCallbackの代わりTargetParameterCountExceptionでコースの結果を使用して..
一見矛盾しているようなものがちょうど普通のk今?ここでは、少なくともSendOrPostCallback、Action、BeginInvokeをキーワードとして検索して以来、ここで少し失われていると感じても意味のある結果は得られませんでした。情報の
FYI、国家のためのセッターが_not called_がある更新はデータの結果として発生した場合結合システム。 SetValueが直接呼び出されます。そのため、この同期手法は期待どおりに機能しない可能性があります。一般的なベストプラクティスは、すべてのDPアップデートがUIスレッドで発生していることを確認することです。これは、UIロジック(ViewModel)を、基礎となるデータおよびロジック(Model)で行われているマルチスレッドワークから分離することを意味します。 –