标签: invoke

如何使用Reflection在.NET中调用重载方法

有没有办法在.NET(2.0)中使用反射调用重载方法.我有一个动态实例化从公共基类派生的类的应用程序.出于兼容性目的,此基类包含2个同名方法,一个包含参数,另一个不包含.我需要通过Invoke方法调用无参数方法.现在,我得到的只是一个错误告诉我,我正试图调用一个模棱两可的方法.

是的,我可以将对象转换为我的基类的实例并调用我需要的方法.最终发生,但现在,内部并发症将无法实现.

任何帮助都会很棒!谢谢.

.net reflection overloading invoke .net-2.0

66
推荐指数
3
解决办法
3万
查看次数

如何执行作为参数传递给函数的方法

我想在JavaScript中编写自己的函数,它将一个回调方法作为参数并在完成后执行它,我不知道如何在我的方法中调用一个作为参数传递的方法.喜欢反思.

示例代码

function myfunction(param1, callbackfunction)
{
    //do processing here
    //how to invoke callbackfunction at this point?
}

//this is the function call to myfunction
myfunction("hello", function(){
   //call back method implementation here
});
Run Code Online (Sandbox Code Playgroud)

javascript invoke method-invocation

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

如何使用反射(Java)调用私有静态方法?

我想调用一个私有静态方法.我有它的名字.我听说可以使用Java反射机制完成它.我该怎么做?

编辑:尝试调用方法时遇到的一个问题是如何指定其参数的类型.我的方法接收一个参数,其类型是Map.因此我做不到Map<User, String>.TYPE(在运行时因为Java类型擦除而没有Map这样的东西).有没有其他方法来获得该方法?

java reflection invoke

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

MethodInvoker与Control.BeginInvoke的Action

哪个更正确,为什么?

Control.BeginInvoke(new Action(DoSomething), null);

private void DoSomething()
{
    MessageBox.Show("What a great post");
}
Run Code Online (Sandbox Code Playgroud)

要么

Control.BeginInvoke((MethodInvoker) delegate { 
    MessageBox.Show("What a great post");
}); 
Run Code Online (Sandbox Code Playgroud)

我觉得我在做同样的事情,所以什么时候适合使用MethodInvokervs Action,甚至写一个lambda表达式?

编辑:我知道写一个lambda vs之间并没有什么区别Action,但MethodInvoker似乎是出于特定目的.它有什么不同吗?

.net c# delegates invoke

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

通过反射调用带有可选参数的方法

我使用带有可选参数的C#4.0遇到了另一个问题.

我如何调用一个函数(或者更确切地说是构造函数,我有ConstructorInfo对象),我知道它不需要任何参数?

这是我现在使用的代码:

type.GetParameterlessConstructor()
    .Invoke(BindingFlags.OptionalParamBinding | 
            BindingFlags.InvokeMethod | 
            BindingFlags.CreateInstance, 
            null, 
            new object[0], 
            CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

(我刚试过不同的BindingFlags).

GetParameterlessConstructor是我写的自定义扩展方法Type.

.net c# reflection invoke default-value

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

如何调用存储在HashMap中的方法?(JAVA)

我有一个命令列表(i,h,t等),用户将在命令行/终端Java程序中输入.我想存储一个命令/方法对的哈希:

'h', showHelp()
't', teleport()
Run Code Online (Sandbox Code Playgroud)

所以我可以使用类似的代码:

HashMap cmdList = new HashMap();

cmdList.put('h', showHelp());
if(!cmdList.containsKey('h'))
    System.out.print("No such command.")
else
   cmdList.getValue('h')   // This should run showHelp().
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果没有,这是一个简单的方法吗?

java methods hash invoke

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

清理使用InvokeRequired乱丢的代码

我知道,当从任何非UI线程操作UI控件时,您必须封送对UI线程的调用以避免问题.一般的共识是您应该使用测试InvokeRequired,如果为true,则使用.Invoke来执行封送处理.

这会导致很多代码看起来像这样:

private void UpdateSummary(string text)
{
    if (this.InvokeRequired)
    {
        this.Invoke(new Action(() => UpdateSummary(text)));
    }
    else
    {
        summary.Text = text;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我可以省略InvokeRequired测试并只调用Invoke,如下所示:

private void UpdateSummary(string text)
{
    this.Invoke(new Action(() => summary.Text = text));
}
Run Code Online (Sandbox Code Playgroud)

这样做有问题吗?如果是这样,是否有更好的方法来保持InvokeRequired测试,而不必在整个地方复制和粘贴此模式?

c# multithreading invoke invokerequired

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

在C#中调用BeginInvoke/Invoke时如何获取返回值

我有这个小方法应该是线程安全的.一切正常,直到我希望它具有回报价值而不是虚空.如何在调用BeginInvoke时获得返回值?

public static string readControlText(Control varControl) {
        if (varControl.InvokeRequired) {
            varControl.BeginInvoke(new MethodInvoker(() => readControlText(varControl)));
        } else {
            string varText = varControl.Text;
             return varText;
        }

    }
Run Code Online (Sandbox Code Playgroud)

编辑:我想在这种情况下让BeginInvoke不是nessecary,因为我需要来自GUI的值才能继续线程.所以使用Invoke也很好.只是不知道如何在以下示例中使用它来返回值.

private delegate string ControlTextRead(Control varControl);
    public static string readControlText(Control varControl) {
        if (varControl.InvokeRequired) {
            varControl.Invoke(new ControlTextRead(readControlText), new object[] {varControl});
        } else {
            string varText = varControl.Text;
             return varText;
        }

    }
Run Code Online (Sandbox Code Playgroud)

但不知道如何使用该代码获得价值;)

.net c# multithreading invoke begininvoke

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

无论InvokeRequired如何,调用Invoke有什么问题?

我已经看到了交叉线程访问GUI控件的常见设置,如下所述: 将线程安全访问方法写入Windows窗体控件的最短方法

我发现的所有网络点击描述了类似的事情.

但是,为什么我们需要检查InvokeRequired?我们不能直接调用Invoke吗?

我认为答案是否定的,所以我真正的问题是'为什么'?

c# user-interface invoke event-handling invokerequired

38
推荐指数
1
解决办法
6787
查看次数

确保在WPF中的UI线程上运行

我正在构建一个WPF应用程序.我正在与服务器端进行一些异步通信,我在客户端上使用Prism进行事件聚合.这两件事导致产生新的线程,而不是UI线程.如果我尝试在这些回调和事件处理程序线程上执行"WPF操作",那么世界将会崩溃,现在它已经开始了.

首先,我遇到了尝试在服务器回调中创建一些WPF对象的问题.我被告知线程需要在STA模式下运行.现在我正在尝试更新Prism事件处理程序中的一些UI数据,我被告知:

调用者无法访问此线程,因为另一个线程拥有它.

所以; 在WPF中解决问题的关键是什么?我在这篇MSDN帖子中读到了WPF Dispatcher .我开始明白了,但我还没有巫师.

  1. 当我需要运行我不确定将在UI线程上调用的东西时,总是使用Dispatcher.Invoke的关键是什么?
  2. 如果它实际上是在UI线程上调用的,它是否重要,我还是做Dispatcher.Invoke?
  3. Dispatcher.Invoke =同步.Dispathcher.BeginInvoke = async?
  4. Dispatcher.Invoke会请求UI线程,然后停止等待吗?是不良做法和风险较低的程序?
  5. 我怎样才能得到调度员?Dispatcher.CurrentDispatcher会不会给我代表UI线程的调度程序?
  6. 是否存在多个Dispatcher,或者"Dispatcher"与应用程序的UI线程基本相同?
  7. 和BackgroundWorker有什么关系?我什么时候使用它呢?我认为这总是异步的?
  8. 在UI公寓模式下运行在UI线程上运行的所有内容(通过调用)吗?即如果我有需要在STA模式下运行的东西 - Dispatcher.Invoke会足够吗?

有人想帮我清理一下吗?任何相关的建议等?谢谢!

.net wpf invoke dispatcher

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