c#在线程中运行InvokeMember

本文关键字:运行 InvokeMember 线程 | 更新日期: 2023-09-27 18:01:33

所以我要做的是在一个线程中运行InvokeMember。c#:在单独的线程中使用[Type].InvokeMember()调用方法

现在我的代码是这样的

            Assembly OCA = Assembly.LoadFrom("./CardMax2.Elkart.OrderClutchAgent.dll");
            Type[] types = OCA.GetTypes();
            foreach (var type in types)
            {
                //MethodInfo[] methods = type.GetMethods();
                if (type.Name == "OrderClutchAgent")
                {
                    var obj = Activator.CreateInstance(type);
                    type.InvokeMember("RunAgent",BindingFlags.Default | BindingFlags.InvokeMethod,null,obj,null);
                }
            }
现在,当我尝试在线程中运行它时,代码看起来像这样:
            Assembly OCA = Assembly.LoadFrom("./CardMax2.Elkart.OrderClutchAgent.dll");
            Type[] types = OCA.GetTypes();
            foreach (var type in types)
            {
                //MethodInfo[] methods = type.GetMethods();
                if (type.Name == "OrderClutchAgent")
                {
                    var obj = Activator.CreateInstance(type);
                    Thread t = new Thread(delegate()
                                              {
                                                  type.InvokeMember("RunAgent", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, null);
                                              });
                    t.Start();
                }
            }

但是用这个代码我得到奇怪的异常:

Method 'Org.BouncyCastle.Asn1.X509.TbsCertificateList+RevokedCertificatesEnumeration+RevokedCertificatesEnumerator.RunAgent' not found.

是我做错了什么还是有人可以指出为什么我得到这个异常

c#在线程中运行InvokeMember

传奇的foreach捕获问题-在调用它的时候(在不同的线程上),type变量引用了不同的Type

复制:

foreach (var tmp in types)
{
    var type = tmp;
    // your code
}
不同之处在于循环变量(在您的示例中是type,在我的示例中是tmp)的作用域在循环之外(根据规范),因此出于捕获目的,它是整个循环共同的单个变量。然而,在我的示例中,type的作用域是循环中,因此(为了捕获目的)每次迭代都被视为不同的变量。