事件,C#中的操作-在线程上下文中

事件,C#中的操作-在线程上下文中,c#,multithreading,visual-studio-2010,.net-4.0,.net-4.5,C#,Multithreading,Visual Studio 2010,.net 4.0,.net 4.5,我在库中调用一个方法“Foo(objects,Action)”。 由于函数本身涉及一些执行时间,因此我使用CountDownEvents的 当函数完成其工作时通知我 大概 countdownEvent.Reset(); try { Foo(obj, ()=> countdownEvent.Signal()); } catch(Exception e) { countdownEvent.Signal(); } countdownEvent.Wait();

我在库中调用一个方法“Foo(objects,Action)”。 由于函数本身涉及一些执行时间,因此我使用CountDownEvents的 当函数完成其工作时通知我

大概

countdownEvent.Reset();


try
 {
     Foo(obj, ()=> countdownEvent.Signal());
 }
 catch(Exception e)
 {
    countdownEvent.Signal();
 }
 countdownEvent.Wait();
我不理解的部分是

  • 什么是()=>countdownEvent.Signal()?“()=>”特别代表什么
  • 为什么方法签名不是写在Foo(对象s,CountDownEvent事件)上的,它可以 内部信号
  • 我还没有真正理解动作课。谷歌搜索了一下,但就是找不到 一些超级简单的例子开始
  • 感谢您的帮助

    ()=>倒计时事件。信号()
    是一个

    在这种特殊情况下,是一种匿名方法,它不接受任何参数,并且具有与countdownEvent.Signal()相同的返回类型

    在这种特殊情况下,是一种匿名方法,它不接受任何参数,并且具有与
    countdownEvent.Signal()
    相同的返回类型

  • ()=>是lambda结构(请参阅)。通过使用lambda表达式,您可以编写可以作为参数传递或作为函数调用值返回的本地函数。Lambda表达式对于编写LINQ查询表达式特别有用。但是您可以使用它来编写任何类型的委托实现
  • 您可以以显示的方式指定相同的代码,但使用Action会使其更加灵活。在第一种情况下,它是一个特定的函数,具有声明的行为。第二,它是一些活动,您可以根据程序的逻辑进行更改
  • 只是一个委托,它声明了一些动态行为。它封装了一个具有参数且不返回值的方法。若要引用具有参数并返回值的方法,请改用泛型Func委托。当您的类需要某种行为,并且您希望您的类使用者自己声明这种行为时,经常使用它 更新:根据VikciaR评论

  • ()=>是lambda结构(请参阅)。通过使用lambda表达式,您可以编写可以作为参数传递或作为函数调用值返回的本地函数。Lambda表达式对于编写LINQ查询表达式特别有用。但是您可以使用它来编写任何类型的委托实现
  • 您可以以显示的方式指定相同的代码,但使用Action会使其更加灵活。在第一种情况下,它是一个特定的函数,具有声明的行为。第二,它是一些活动,您可以根据程序的逻辑进行更改
  • 只是一个委托,它声明了一些动态行为。它封装了一个具有参数且不返回值的方法。若要引用具有参数并返回值的方法,请改用泛型Func委托。当您的类需要某种行为,并且您希望您的类使用者自己声明这种行为时,经常使用它 更新:根据VikciaR评论

  • 这就是所谓的Lambda表达式。您可以将其视为简单的内联方法。()=>表示此方法没有参数。(字符串x)=>表示-1个参数
  • 事件和lambda表达式是类似的概念(lambda表达式是从委托演化而来的)。阅读
  • 是最好的:-)
  • 这就是所谓的Lambda表达式。您可以将其视为简单的内联方法。()=>表示此方法没有参数。(字符串x)=>表示-1个参数
  • 事件和lambda表达式是类似的概念(lambda表达式是从委托演化而来的)。阅读
  • 是最好的:-)

  • 我的理解是行动只是一个委托。我的理解是行动只是一个委托。我会纠正你的3。操作没有单个实现:有多个具有不同数量参数的实现。Func不仅有参数,还有返回值。我会更正你的3。操作没有单个实现:有多个具有不同数量参数的实现。Func不仅具有参数,还具有返回值。