我对使用线程还很陌生。我试图设置 aDependencyProperty
的值:
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 的艰难方式(因为它在调用方法时提供了一个参数)。它不适用于 Action (因为缺少参数。而且,wpf 真的是个婊子,调试并找到 TargetParameterCountException 的原因,“没有可用的源”并且根本没有任何线索。
为什么我必须在那里使用 SendOrPostCallback?我怎么知道在这种情况下这是正确的?因为实际上调用 setter 是通过以下方式工作的:
Dispatcher.BeginInvoke((Action)(()=>State=States.Updating), null);
并使用 SendOrPostCallback 而不是当然会导致 TargetParameterCountException..
只是想知道这样看似不一致的事情是否只是常识?在这里感觉有点迷失,至少因为使用 SendOrPostCallback、Action 和 BeginInvoke 作为关键字进行谷歌搜索并没有有意义的结果。