2017-09-15 18 views
0

次のコードを実行するとエラーはスローされませんが、呼び出されているメソッドは実行されません。動的に実行するメソッドはエラーをスローしませんが、何も起こっていません

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"); 
+0

はあなたを持っていますメソッドが実行されるはずのスレッドをデバッグしましたか?あなたはそれがエラーを投げていないことをどのように知っていますか? – xxbbcc

+0

'Case'メソッドの中にブレークポイントを追加してテストしましたか? – adiga

+0

あなたが '間違っている 'ことがわかるのは、' parameters'が 'methodInfo.Invoke(...)'に渡すための 'object []'でなければならないということだけですが、何の問題も起こらないはずです。 MCVEでこの問題を実演できますか? – Amy

答えて

0

限り、出力として、あなたはここで間違って物事のカップルを作っています。なぜあなたは例外がないと言ったのか分かりません。

  • GetType()を使用している間は、完全な名前空間について言及する必要があります。
  • 呼び出しあなたはstaticメソッドの呼び出し中のインスタンスを作成する必要はありませんobject[]
  • を期待(あなたが行う場合、これはエラーがスローされません)

public static void Main(string[] args) 
{ 
    string classNameSpace = "Example.OtherClass"; 
    string[] Parameters = { "User", "123", "IE" }; 

    Type type = Type.GetType(classNameSpace); 
    Object obj = Activator.CreateInstance(type); 
    MethodInfo methodInfo = type.GetMethod("MyFunction"); 

    methodInfo.Invoke(null, new object[] { Parameters }) 
} 
+0

これは機能しました。後でエラーが発生しましたが、最初の問題は解決されました。ありがとう。 –

+0

アップデート:すべて正常に動作します。また、私が例外を何も得ていなかった理由は、私が誤ってtry-catchステートメントの内部にコードのその部分を残したからです。 –

関連する問題