标签: invoke

将方法名称作为字符串给出时,如何调用Java方法?

如果我有两个变量:

Object obj;
String methodName = "getName";
Run Code Online (Sandbox Code Playgroud)

在不知道类的情况下obj,如何调用其上标识的方法methodName

被调用的方法没有参数和String返回值.它是Java bean的getter.

java reflection invoke

655
推荐指数
15
解决办法
84万
查看次数

跨线程操作无效:从创建它的线程以外的线程访问控件

我有一个场景.(Windows Forms,C#,.NET)

  1. 有一个主要表单托管一些用户控件.
  2. 用户控件执行一些繁重的数据操作,这样如果我直接调用了 UserControl_Load方法,则UI在加载方法执行的持续时间内变得无响应.
  3. 为了克服这个问题,我在不同的线程上加载数据(尝试尽可能少地更改现有代码)
  4. 我使用了后台工作线程来加载数据,完成后会通知应用程序已经完成了它的工作.
  5. 现在来了一个真正的问题.所有UI(主窗体及其子用户控件)都是在主要主线程上创建的.在usercontrol的LOAD方法中,我基于userControl上的某些控件(如文本框)的值来获取数据.

伪代码看起来像这样:

代码1

UserContrl1_LoadDataMethod()
{
    if (textbox1.text == "MyName") // This gives exception
    {
        //Load data corresponding to "MyName".
        //Populate a globale variable List<string> which will be binded to grid at some later stage.
    }
}
Run Code Online (Sandbox Code Playgroud)

它给出的例外是

跨线程操作无效:从创建它的线程以外的线程访问控件.

为了更多地了解这一点,我做了一些谷歌搜索,并提出了一个建议,如使用下面的代码

代码2

UserContrl1_LoadDataMethod()
{
    if (InvokeRequired) // Line #1
    {
        this.Invoke(new MethodInvoker(UserContrl1_LoadDataMethod));
        return;
    }

    if (textbox1.text == "MyName") // Now it wont give an exception
    {
    //Load data correspondin to "MyName"
        //Populate a globale …
Run Code Online (Sandbox Code Playgroud)

c# multithreading invoke winforms

559
推荐指数
18
解决办法
39万
查看次数

Invoke()和BeginInvoke()之间有什么区别

只是想知道BeginInvoke()和之间的区别Invoke()是什么?

主要是每个人将用于什么.

编辑:创建一个线程对象和调用invoke并只调用BeginInvoke()一个委托有什么区别?或者他们是一样的吗?

.net c# multithreading invoke begininvoke

383
推荐指数
6
解决办法
18万
查看次数

什么可能导致java.lang.reflect.InvocationTargetException?

好吧,我试图理解和阅读可能导致它的原因,但我无法得到它:

我在我的代码中有这个地方:

 try{
 ..
 m.invoke(testObject);
 ..
 } catch(AssertionError e){
 ...
 } catch(Exception e){
 ..
 }
Run Code Online (Sandbox Code Playgroud)

事实是,当它试图调用某个方法时,它会抛出 InvocationTargetException而不是其他预期的异常(具体而言ArrayIndexOutOfBoundsException).因为我实际上知道调用了什么方法,所以我直接使用了这个方法代码,并为假设要抛出的行添加了一个try-catch块 ArrayIndexOutOfBoundsException,它确实ArrayIndexOutOfBoundsException按预期抛出.然而,当它上升时它以某种方式改变,InvocationTargetException并且在上面的代码中,catch(Exception e) e InvocationTargetException并不ArrayIndexOutOfBoundsException 像预期的那样.

什么可能导致这样的行为或我如何检查这样的事情?

java reflection exception invoke

299
推荐指数
6
解决办法
95万
查看次数

反思:如何使用参数调用方法

我试图通过参数反射调用方法,我得到:

对象与目标类型不匹配

如果我调用没有参数的方法,它可以正常工作.如果我调用该方法Test("TestNoParameters"),则基于以下代码,它可以正常工作.但是,如果我打电话Test("Run"),我会得到一个例外.我的代码有问题吗?

我最初的目的是传递一系列对象,例如public void Run(object[] options)但这不起作用,我尝试了一些更简单的例如字符串而没有成功.

// Assembly1.dll
namespace TestAssembly
{
    public class Main
    {
        public void Run(string parameters)
        { 
            // Do something... 
        }
        public void TestNoParameters()
        {
            // Do something... 
        }
    }
}

// Executing Assembly.exe
public class TestReflection
{
    public void Test(string methodName)
    {
        Assembly assembly = Assembly.LoadFile("...Assembly1.dll");
        Type type = assembly.GetType("TestAssembly.Main");

        if (type != null)
        {
            MethodInfo methodInfo = type.GetMethod(methodName);

            if (methodInfo != null)
            {
                object result = null;
                ParameterInfo[] …
Run Code Online (Sandbox Code Playgroud)

c# reflection parameters methods invoke

187
推荐指数
7
解决办法
35万
查看次数

跨线程操作无效:控制'textBox1'从其创建的线程以外的线程访问

我想从微控制器发送温度值,使用UART到C#接口和显示温度开启Label.Content.这是我的微控制器代码:

while(1) {
   key_scan(); // get value of temp
   if (Usart_Data_Ready())
   {
      while(temperature[i]!=0)
      {
         if(temperature[i]!=' ')
         {
            Usart_Write(temperature[i]);
            Delay_ms(1000);
         }
         i = i + 1;
      }
      i =0;
      Delay_ms(2000);
   }
}
Run Code Online (Sandbox Code Playgroud)

我的C#代码是:

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
   txt += serialPort1.ReadExisting().ToString();
   textBox1.Text = txt.ToString();
}
Run Code Online (Sandbox Code Playgroud)

但是异常出现了" 跨线程操作无效:控制'textBox1'从一个线程访问,而不是在它创建的线程上 "请告诉我如何从我的微控制器获取温度字符串并删除此错误!

c# multithreading invoke uart

169
推荐指数
6
解决办法
33万
查看次数

Invoke和DynamicInvoke之间的区别

委托中的Invoke和DynamicInvoke有什么区别?请给我一些代码示例来解释这两种方法之间的区别.

.net c# delegates invoke dynamic-invoke

123
推荐指数
1
解决办法
4万
查看次数

调用(委托)

任何人都可以解释这个链接上写的这个声明

Invoke(Delegate):
Run Code Online (Sandbox Code Playgroud)

在拥有控件的基础窗口句柄的线程上执行指定的委托.

任何人都可以解释这意味着什么(尤其是大胆的)我无法清楚地理解它

c# delegates invoke winforms

86
推荐指数
4
解决办法
26万
查看次数

Javascript从字符串动态调用对象方法

我可以动态调用方法名称为字符串的对象方法吗?我会想象它是这样的:

var FooClass = function() {
    this.smile = function() {};
}

var method = "smile";
var foo = new FooClass();

// I want to run smile on the foo instance.
foo.{mysterious code}(); // being executed as foo.smile();
Run Code Online (Sandbox Code Playgroud)

javascript oop methods dynamic invoke

85
推荐指数
4
解决办法
5万
查看次数

Func <T>()vs Func <T> .Invoke()

我很好奇直接调用Func和使用Invoke()之间的区别.有区别吗?是第一个,语法糖,并在下面调用Invoke()?

public T DoWork<T>(Func<T> method)
{
    return (T)method.Invoke();
}
Run Code Online (Sandbox Code Playgroud)

VS

public T DoWork<T>(Func<T> method)
{
    return (T)method();
}
Run Code Online (Sandbox Code Playgroud)

或者我完全走错了轨道:)谢谢.

c# invoke func

73
推荐指数
2
解决办法
2万
查看次数