Thread内的SetValue(Reflection)中的TargetInvocationException

时间:2015-12-01 10:30:01

标签: c# multithreading exception reflection

我得到了这个例外:

An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll

当我插入扩展方法' SetProperty'在ThreadStart中:

Object temp = element;

PropertyInfo currentProperty = temp.GetType().GetProperty("FontSize");

object currentValue = currentProperty.GetValue(temp);

threads[i] = new Thread(
new ThreadStart(() => 
{ currentProperty.SetValue(temp, Convert.ChangeType(58, currentProperty.PropertyType), null); }));

threads[i].Start();

但是当我在没有线程的情况下使用SetValue时,一切都可以正常运行,没有任何异常或错误。

PropertyInfo currentProperty = temp.GetType().GetProperty("FontSize");

object currentValue = currentProperty.GetValue(temp);

currentProperty.SetValue(temp, Convert.ChangeType(58, currentProperty.PropertyType), null);

使用Thread可能存在哪些问题? 我使用的是C#6,.NET 4.5.6。

1 个答案:

答案 0 :(得分:1)

使用线程时,此语句为true:调用线程无法访问此对象,因为其他线程拥有该对象。 假设调用线程是GUI,我不确定为什么你需要一个昂贵的线程来运行你的属性代码。 要使用调度程序,请尝试:

Dispatcher.Invoke(() =>
{
    // Interact with code on a different thread.
});