这年代,我从WinForms旧代码:
private void ValueChanged(double inValue1, double inValue2) {
//only manual mode for this driver, so that s easy.
if (ValueLabel.InvokeRequired) {
ValueLabel.Invoke(new MethodInvoker(delegate {
ValueLabel.Text = (inValue1* inValue2/ 1000).ToString("f1");
}
));
}
else {
ValueLabel.Text = (inValue1* inValue2/ 1000).ToString("f1");
}
}
有一个简单的方法来转换这是WPF友好吗?到目前为止,我有:
private void KVPValueChanged(double inValue1, double inValue2) {
if (ValueLabel.Dispatcher.Thread == Thread.CurrentThread){
ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
} else {
ValueLabel.Dispatcher.BeginInvoke(delegate {
ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
});
}
}
但第二个委托调用失败。我如何调用这个委托?我想我可以穿过整个委托方法,使委托方法的一个实例,调用特定实例,等等,但我认为这些匿名代表的目的是为了避免麻烦。加上我的旧winforms代码,首先实现,所以我真的想避免de-anonymize我所有的代表。
<强>编辑:< /强>我可以尝试使用MethodInvoker像我之前,但编译器会困惑。MethodInvoker是System.Windows的一部分。形式,所以使用这种方法不工作。如:
private void ValueChanged(double inValue1, double inValue2) {
if (ValueLabel.Dispatcher.Thread == Thread.CurrentThread) {
ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
}
else {
ValueLabel.Dispatcher.BeginInvoke(new System.Windows.Forms.MethodInvoker(delegate {
ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
}));
}
}
使用MethodInvoker不是犹太食品。有独立的实现,或其他方法使用相同的行为?