私はスレッドの操作にかなり慣れていません。の値を設定しようとしていましたDependencyProperty
:
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));
セッターで SendOrPostCallback を使用する必要があるという難しい方法に気付きました (メソッドを呼び出すときに引数を提供するため)。アクションでは機能しません(引数が欠落しているためです。そして、wpfは実際にはそれについての雌犬であり、「ソースが利用できません」でTargetParameterCountExceptionの原因をデバッグして見つけ、手がかりがまったくありません.
SendOrPostCallback を使用する必要があるのはなぜですか? この場合、これが正しいものであることをどのように知る必要がありますか? 実際にセッターを呼び出すと、次の方法で機能するためです。
Dispatcher.BeginInvoke((Action)(()=>State=States.Updating), null);
コースの代わりに SendOrPostCallback を使用すると、TargetParameterCountException が発生します。
そのような一見矛盾しているように見えることは、ただの常識なのだろうか?少なくともSendOrPostCallback、Action、およびBeginInvokeをキーワードとしてグーグルで検索しても意味のある結果が得られなかったため、ここで少し迷っています。