次のコードを実行するとエラーはスローされませんが、呼び出されているメソッドは実行されません。動的に実行するメソッドはエラーをスローしませんが、何も起こっていません
string Class = Node.SelectSingleNode("class").InnerXml;
string[] Parameters = { Username, Password, Browser };
Type type = Type.GetType(Class);
Object obj = Activator.CreateInstance(type);
MethodInfo methodInfo = type.GetMethod("Case");
Thread userThread = new Thread(() => methodInfo.Invoke(obj, Parameters));
userThread.Start();
クラス変数に正しい文字列が含まれていることを確認しました。私も新しいスレッドを開始せずにmethodInfo.Invoke(...)を実行しましたが、同じ問題が発生しました。
編集:
using System;
using System.Reflection;
using System.Xml;
namespace Example
{
class MyClass
{
public static void Main(string[] args)
{
string Class = "OtherClass";
string[] Parameters = { "User", "123", "IE" };
Type type = Type.GetType(Class);
Object obj = Activator.CreateInstance(type);
MethodInfo methodInfo = type.GetMethod("MyFunction");
methodInfo.Invoke(obj, Parameters)
}
}
class OtherClass
{
public static void MyFunction(string[] Parameters)
{
Console.WriteLine(Parameters[0]);
}
}
}
私は、「ユーザー」のコンソールプリントを見ることを期待ではなく、私は何を取得。コードをデバッグすると、 "Object obj = ..."が原因でエラーが発生したように見えます。
次のコードは、唯一の「1.1」
Console.WriteLine("1");
Type type = Type.GetType(Class);
Console.WriteLine("1.1");
Object obj = Activator.CreateInstance(type);
Console.WriteLine("1.2");
MethodInfo methodInfo = type.GetMethod("Case");
Console.WriteLine("2");
はあなたを持っていますメソッドが実行されるはずのスレッドをデバッグしましたか?あなたはそれがエラーを投げていないことをどのように知っていますか? – xxbbcc
'Case'メソッドの中にブレークポイントを追加してテストしましたか? – adiga
あなたが '間違っている 'ことがわかるのは、' parameters'が 'methodInfo.Invoke(...)'に渡すための 'object []'でなければならないということだけですが、何の問題も起こらないはずです。 MCVEでこの問題を実演できますか? – Amy