线程内部的SetValue(反射)中存在TargetInvocationException



我得到了这个异常:

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

当我在ThreadStart:内部插入扩展方法"SetProperty"时

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#,.NET 4.5.6。

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

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

相关内容

  • 没有找到相关文章

最新更新