import java.lang.reflect.Method;
public class InvokeTester {
public int add(int param1, int param2) {
return param1 + param2;
}
public String echo(String mesg) {
return "echo " + mesg;
}
public static void main(String[] args) throws Exception {
Class classType = InvokeTester.class;
Object invokertester = classType.newInstance();
Method addMethod = classType.getMethod("add", new Class[] { int.class,
int.class });
//Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,
//如果参数为基本类型数据,必须转换为相应的包装类型的对象。invoke()方法的返回值总是对象,
//如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,
//再将其返回
Object result = addMethod.invoke(invokertester, new Object[] {
new Integer(100), new Integer(200) });
//在jdk5.0中有了装箱 拆箱机制 new Integer(100)可以用100来代替,系统会自动在int 和integer之间转换
System.out.println(result);
Method echoMethod = classType.getMethod("echo",
new Class[] { String.class });
result = echoMethod.invoke(invokertester, new Object[] { "hello" });
System.out.println(result);
}
}
分享到:
相关推荐
P/Invoke的工作原理是定义一个托管的函数声明,该声明对应于非托管库中的函数。在本例中,可能是调用了Windows API中的串口管理函数,如`CreateFile`,`SetCommState`,`ReadFile`和`WriteFile`等。这些函数允许我们...
- **Invoke**: 是一个同步方法,调用后会阻塞当前线程直到GUI更新完成。适用于简单的操作,如更新文本或按钮状态。 - **BeginInvoke**: 是一个异步方法,调用后立即返回,不会阻塞调用线程。更适合处理耗时较长的...
`InvocationHandler`接口只有一个`invoke`方法,其签名如下: ```java public interface InvocationHandler { Object invoke(Object proxy, Method method, Object[] args) throws Throwable; } ``` 这个方法...
在这个例子中,`BackgroundWorker_DoWork`方法在一个后台线程中运行,模拟了一个耗时操作。当操作完成后,它创建一个`UpdateUI`委托实例,并将其传递给`label1.Invoke`。`Invoke`方法会确保`UpdateLabel`方法在UI...
socket 源码程序 包含socket服务端 ,客户端,通过 Networkstream 流 streamReader /streamWriter进行动态获取写入信息。并且使用 委托 invoke ==
一个方法可以生成多个 Method 对象,但只有一个 root 对象,主要用于持有一个 MethodAccessor 对象,这个对象也可以认为是一个方法只有一个,相当于是 static 的。因为 Method 的 invoke 是交给 MethodAccessor 执行...
在这个例子中,`MyDelegate`是自定义的委托类型,它定义了一个接受字符串参数并返回无类型的方法签名。`PrintMessage`方法符合这个签名,所以我们可以通过`new MyDelegate(PrintMessage)`将它绑定到委托。然后,通过...
- `Invoke`: 这是一个同步方法,它会阻塞当前线程,直到被调用的方法在UI线程上完成执行。这适用于那些需要等待结果的情况。 - `BeginInvoke`: 这是异步方法,它不会阻塞当前线程,而是立即返回,让UI线程在适当的...
- `Invoke`方法接受一个委托对象作为参数,并调用该委托所指向的方法。 - `Invoke`方法确保了控件的访问是在正确的线程中进行的,从而避免了跨线程访问的问题。 #### 四、数据库查询与结果显示 `SelecDB`方法负责...
在这个例子中,`GetMethod`用于获取`TestClass`的`PrintMessage`方法,然后`Invoke`方法被用来在创建的实例上执行这个方法,传入参数"Hello, World!"。 反射和Invoke的应用场景广泛,包括但不限于: 1. **插件系统*...
在多线程编程中,我们经常遇到需要在一个非UI线程(后台线程)操作UI控件的情况,这时就需要用到`Control.Invoke`方法。本文将深入探讨C#中的`Control.Invoke`方法以及如何正确地进行跨线程访问控件。 首先,理解...
这个签名的转换,不只是适用于Windows的方法签名,只要给定一个C头文件,就可以转换成为相关的C#的import方法签名 作者:玛玛哈哈m 链接:https://www.jianshu.com/p/6b65175ce1d9 来源:简书 著作权归作者所有。...
忽略跨线程访问的错误 CheckForIllegalCrossThreadCalls = false,但是这个方法很不稳定,使用invoke方法解决跨线程访问的问题,里边有2个例子, 通过自己额外创建的线程改变label控件中的内容从而验证invoke方法
在Windows桌面应用开发中,WinForm是一个常用的框架,...综上所述,这个实例提供了关于如何在WinForm应用中有效利用多线程和Invoke方法的一个实际例子,对于理解和优化VB.NET应用程序的性能和用户体验具有重要意义。
在这个例子中,`clean`函数就是一个任务,可以通过命令行`invoke clean`来执行。 `invoke`还支持任务依赖,可以定义一个任务依赖于另一个任务,通过`@task`装饰器的`precedes`参数来实现: ```python @task...
当你在一个非UI线程中尝试访问或修改UI元素时,必须使用`Invoke`。它会阻塞调用线程,直到UI线程完成指定的委托操作。这样做的好处是可以确保所有UI更新按顺序执行,避免了并发问题,但缺点是可能会导致主线程(UI...
P/Invoke Interop Assistant是一个非常实用的工具,它专门用于帮助C#或VB.NET开发者将C或C++的函数和数据类型转换为.NET Framework兼容的形式。这个工具的主要目的是解决跨语言互操作性问题,即所谓的“平台调用”...
下面通过一个具体的例子来进一步理解`Invoke`和`BeginInvoke`的区别: ```csharp private delegate void InvokeDelegate(); private void InvokeMethod() { // C代码段 } private void butInvoke_Click(object ...