這裏是我的擴展方法:的WPF控件的extenstion方法引起StackOverflowException
public static void SetThreadSafeProperty<T>(this System.Windows.FrameworkElement control, Expression<Func<T>> property, T value)
{
if (control.Dispatcher.CheckAccess())
{
var del = new SetThreadSafePropertyDelegate<T>(SetThreadSafeProperty);
control.Dispatcher.Invoke(del, control, property, value);
}
else
{
PropertyInfo propertyInfo = GetPropertyInfo(property);
if (propertyInfo != null)
{
propertyInfo.SetValue(control, value, null);
}
}
}
而這裏的如何,我叫它:
tbManufacturer.SetThreadSafeProperty(() => tbManufacturer.Text, "test");
調試它之後,它看起來像它陷入無限循環。 CheckAcess()是真的,它創建的deletegate只是罰款和調用正確。但它不斷前進並最終失敗。
關於這可能發生的原因的任何想法?
與調試器斷點運行它,看看問題變得明顯。 – 2014-11-20 19:36:52
它應該是相反的:'if(!control.Dispatcher.CheckAccess())' – Clemens 2014-11-20 19:37:24
@Clemens就是這樣,謝謝! – ernest 2014-11-20 19:42:07