David
David

Reputation: 439

Calling a method when the method name is contained in a string

Let's say I have a page Test.aspx along with test.aspx.vb.

Test.aspx.vb contains a class name "TestClass". In that class I have method1(), method2() and method3()

I need to be able to call one of those methods, but I can't hard code it, the method to be executed comes from a string.

I can't do

Select Case StringContainingTheNameOfTheDesiredMethod
    Case "Method1" 
        Method1()
    Case "Method2"
       Method2()
end case

.

That I could find how to do with reflection (I followed that example). My problem is that those methods might need to interact with test.aspx, but when I use .invoke it seems to create a new thread or context and any reference to test.aspx becomes null (setting label1.text = "something" will generate a null reference, but a direct call of method1 (without invoke) will update label1.text just fine.

Is there any solution ? Can anyone give me some tips?

Upvotes: 1

Views: 437

Answers (2)

David
David

Reputation: 439

    Dim xAssembly As Assembly = Assembly.GetExecutingAssembly()

    Dim xClass As Object = xAssembly.CreateInstance("Paradox.Intranet2.ManageUsers", False, BindingFlags.ExactBinding, Nothing, New Object() {}, Nothing, Nothing)
    Dim xMethod As MethodInfo = xAssembly.GetType("Paradox.Intranet2.ManageUsers").GetMethod("TestCallFromString")

    Dim ret As Object = xMethod.Invoke(Me, New Object() {})

Upvotes: 1

Jakub Konecki
Jakub Konecki

Reputation: 46018

You need to pass an instance of Test page to Invoke method (so you invoke it on the object). Sorry for C# code ;-)

MethodInfo method = typeof(TestPage).GetMethod(StringContainingTheNameOfTheDesiredMethod);
method.Invoke(this, null);

Upvotes: 1

Related Questions