标签: invoke

来自control.Invoke((MethodInvoker)委托的返回值{/*...*/};我需要一些解释

#1和#2之间有什么区别:

代码1(编译好):

        byte[] GetSomeBytes()
  {
            return (byte[])this.Invoke((MethodInvoker)delegate 
            { 
                GetBytes(); 
            });
  }

  byte[] GetBytes()
  {
   GetBytesForm gbf = new GetBytesForm();

   if(gbf.ShowDialog() == DialogResult.OK)
   {
    return gbf.Bytes;
   }
   else
    return null;
  }
Run Code Online (Sandbox Code Playgroud)

代码2(没有成功)

int GetCount()
{
       return (int)this.Invoke((MethodInvoker)delegate
       {
           return 3;            
       });
}
Run Code Online (Sandbox Code Playgroud)

代码#2给了我,因为'System.Windows.Forms.MethodInvoker'返回void,返回关键字后面不能跟一个对象表达式.

我该如何解决?为什么(做)编译器认为代码#1是对的?

c# invoke

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

使用反射/将List转换为Var Args调用方法

我有一个参数列表,我有方法名称.我想使用反射调用方法.当我检查Method.invoke的java文档时,它就像Method.invoke(object o,Object args ...).我知道第一个参数传递的内容(即实例方法调用哪个方法的实例)和args是方法的参数.

但是现在我有了包含要传递给方法的值的列表.

比如说:我想调用方法ClassName.methodName(String,int,int),我有一个包含{val1,3,4}的List.

使用反射可能类似于Method.invoke(classNameInstance,??????).但我不知道如何将参数列表转换为varargs并传递.

一种方法可能是如果我知道列表大小是3然后我可以编写Method.invoke(classNameInstance,list.get(0),list.get(1),list.get(2)).

但是我想动态调用的一些方法需要0到12个参数.所以创建switch case并编写12个案例看起来并不"好".每个都将检查参数的数量,并使用参数构建单独的调用.

除了使用开关盒外,还有什么方法可以解决这个问题?

任何帮助将不胜感激.

java reflection list invoke variadic-functions

3
推荐指数
1
解决办法
6511
查看次数

调用匿名闭包

编辑
确定,这里的反馈非常好,让我指出了正确的方向.用于调用匿名闭包的用例位于Scalatra路由层中.我有一堆在不同类型下组合在一起的路由,在本例中,是团队共同的请求:

class Router {
  type TeamType <: _Controller with _Team

  get("""(schedules|rosters|teamresults|teamstats)/\d{8}""".r) {
    val clazz :: date = captures

    val obj = (clazz match {
      case "schedules" => new RosterController
      case "rosters" => new ScheduleController
    }).asInstanceOf[TeamType]

    obj.show(date)
  }
}
Run Code Online (Sandbox Code Playgroud)

通过将匹配表达式包装在一个自调用的匿名闭包中,我们避免在每个匹配的情况下添加"FooController.asInstanceOf [TeamType]",而是在返回的实例上执行类型转换,在过程中保持不变性(即不能" val obj = clazz match {...}"后跟类型cast as obj已经被val'd了)

我相信这是在基于字符串类名创建对象实例时可以获得的短格式.当然,这样说,可能有一种FP方法可以更加简洁地完成工作......

无论如何,很酷的东西,从Groovy缺少匿名闭包,现在我发现Scala也包括在内;-)

原始
不知道如何在Scala中解决这个问题.在Groovy中,您可以定义和调用匿名闭包,如下所示:

{String s-> println(s) }("hello")
Run Code Online (Sandbox Code Playgroud)

Scala中的等价物是什么?而且,如何指定返回类型而不是返回Unit?

谢谢

closures scala anonymous invoke

3
推荐指数
1
解决办法
541
查看次数

在C#中使用属性值调用方法

[AttributeUsage(AttributeTargets.Method,AllowMultiple=true)]
public class MethodId : Attribute
{
    private int mId;
    public MethodId(int mId)
    {
        this.mId = mId;
    }

    public int methodId
    {
        get { return this.mId; }
        set { this.mId = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)
public class Methods
{
    [MethodId(1)]
    public void square()
    {        }

    [MethodId(2)]
    public void Notify()
    {        }
}
Run Code Online (Sandbox Code Playgroud)

如何在MethodId的帮助下访问main()或任何其他类中的square()?

c# properties invoke custom-attributes c#-4.0

3
推荐指数
1
解决办法
5878
查看次数

C# - Emgu cv如何使用CvInvoke.cvLoadImage("ClassPic1.jpg")作为intptr从文件夹加载图像并访问它

如何使用Emgu cv CvInvoke.cvLoadImage(...)从特定文件夹加载图像?我试着这样做

    IntPtr inputImage = CvInvoke.cvLoadImage("C:\\Users\\...\\ClassPic1.jpg");
Run Code Online (Sandbox Code Playgroud)

这可以吗?如果是这样,我将如何作为Emgu.CV.Image文件访问它,以便我将对其进行图像处理?

invoke intptr emgucv loadimage

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

为什么一个事件是空的?(你调用的对象是空的)

我有一个带有按钮,标签和进度条的表单,因此当我单击该按钮时,它会创建一个b类实例来运行一个进程.一旦完成该过程,它将调用EventHandler在主窗体的标签中显示"done"!

我创建了一个委托事件(SetStatusEvent)来执行此操作.当我在EventHandler(usbforProcessExited)之外调用此事件时似乎很好但是当我从usbforProcessExited调用它时它会出错 -

object reference not set to an instance of an object
Run Code Online (Sandbox Code Playgroud)

主要形式

public partial class main : Form
{
    b rsSet = new b();

    public main()
    {
        InitializeComponent();
        rsSet.SetStatusEvent += new RemoteS.SetStatus(updateStatus);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        rsSet.FormatUSB();
    }

    private delegate void UpdateStatus(int i, string str, Color clr);

    private void SetStatus(int i, string str, Color clr)
    {
        this.progressBar1.Value = i;
        this.lbl_status.ForeColor = clr;
        this.lbl_status.Text = str;
    }

    private void updateStatus(int i, String msg, Color color) …
Run Code Online (Sandbox Code Playgroud)

c# null events delegates invoke

3
推荐指数
2
解决办法
8243
查看次数

在另一个线程上捕获异常?

在开发winform应用程序时,通常只需调用以获取主GUI线程来完成GUI工作.

Invoke今天已经过时了(如果我读的正确),相反你应该使用SynchronizationContext相反的.

问题是:我如何处理异常?我注意到有时在"同步/调用"线程上抛出的异常会丢失?

我确实使用了Application.ThreadException,AppDomain.CurrentDomain.UnhandledException但这没有用?

c# multithreading invoke winforms synchronizationcontext

3
推荐指数
1
解决办法
1939
查看次数

C#等待MethodInvoker完成

我需要完成以下场景.ThreadMethod()是一个Timer方法,我在Invoke语句中有UI更新.我需要等到Invoke完成它的工作,然后继续该方法.我怎么能应付这个?

public void ThreadMethod(){
//do some work

            this.Invoke((MethodInvoker)delegate
            {
            //do some GUI update
            });

//wait till Invoke finish its work    
}
Run Code Online (Sandbox Code Playgroud)

c# multithreading timer invoke

3
推荐指数
1
解决办法
3841
查看次数

aws lambda:通过其他lambda函数调用函数

我有一个AWS Lambda函数,需要~30秒.当我将其连接到API网关时,由于5秒超时,它正在发送504.所以我的easyCron工作失败了,不会再试一次(我只有一个免费的计划)

所以我需要一个API,它发送一个正确的200状态.我的想法:

通过短期lambda调用长期lambda.该策略允许调用.

这是代码

var AWS = require('aws-sdk'),

	params = {
		FunctionName: 'cctv',
		InvocationType: 'RequestResponse',
		LogType: 'Tail'
	},
	lambda;
AWS.config.update({region: 'us-east-1'});
lambda = new AWS.Lambda();

exports.handler = function (event, context) {
	'use strict';
	lambda.invoke(params, function (err, data) {
		if (err) {
			console.log(err, err.stack);
		}
		else {
			console.log(data);
		}
	});
	context.succeed('hey cron job, I think my lambda function is not called');

};
Run Code Online (Sandbox Code Playgroud)

但我认为,context.succeed()中止了执行lambda.invoke()

你知道如何解决这个问题吗?

invoke amazon-web-services aws-lambda

3
推荐指数
1
解决办法
1931
查看次数

为什么方法调用因参数异常而失败?

考虑来自WinForms应用程序的此代码示例:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            object[] parms = new object[1];
            parms[0] = "foo";

            DoSomething(parms);
        }

        public static string DoSomething(object[] parms)
        {
            Console.WriteLine("Something good happened");
            return null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

它按预期工作,当您单击button1时,它会向控制台输出"Something good occurred".

现在考虑这个代码示例,除了它DoSomething使用反射调用之外是相同的:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            object[] parms = new object[1];
            parms[0] = "foo";

            System.Reflection.MethodInfo mi …
Run Code Online (Sandbox Code Playgroud)

c# reflection invoke

3
推荐指数
1
解决办法
677
查看次数