Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 后台工作类中的委托和事件_C#_.net_Visual Studio 2010 - Fatal编程技术网

C# 后台工作类中的委托和事件

C# 后台工作类中的委托和事件,c#,.net,visual-studio-2010,C#,.net,Visual Studio 2010,现在,我知道ProgressChangedVenthandler是一名代表。反过来,委托就是一个类 1。“ProgressChangedEventHandler”属于哪一类?我的代码中没有定义任何内容。 Thread1.WorkerReportsProgress = true; Thread1.ProgressChanged += new ProgressChangedEventHandler(Function2HandleWhenProgressChanges); //When progr

现在,我知道ProgressChangedVenthandler是一名代表。反过来,委托就是一个类

1。“ProgressChangedEventHandler”属于哪一类?我的代码中没有定义任何内容。

Thread1.WorkerReportsProgress = true;  
Thread1.ProgressChanged += new ProgressChangedEventHandler(Function2HandleWhenProgressChanges); //When progress changes, define a function to handle  it.
Thread1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Function2HandleWhenThreadIsFinished); //The function to run when the thread is finished
Thread1.DoWork += new DoWorkEventHandler(Thread1_DoWorkDo); //The function defining what the thread must do.
2。“进步改变”是一个事件吗?如果是,这属于哪一类?

3。如果我没有指定“new ProgressChangedEventHandler”,代码仍然可以编译吗?。如下所示。

Thread1.WorkerReportsProgress = true;  
Thread1.ProgressChanged += new ProgressChangedEventHandler(Function2HandleWhenProgressChanges); //When progress changes, define a function to handle  it.
Thread1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Function2HandleWhenThreadIsFinished); //The function to run when the thread is finished
Thread1.DoWork += new DoWorkEventHandler(Thread1_DoWorkDo); //The function defining what the thread must do.
1) 它不属于任何人。它是.NET framework中单独定义的类型

2) 是的。它是在
BackgroundWorker
类上定义的(可以通过按F1键在MSDN中查找它或在
BackgroundWorker
类的实例上调用它来证明)

3) 它是语法上的糖。编译器帮助您减少键入

谷歌搜索“events and delegates.net”会给出很多很好的解释。

1)它不属于任何人。它是.NET framework中单独定义的类型

2) 是的。它是在
BackgroundWorker
类上定义的(可以通过按F1键在MSDN中查找它或在
BackgroundWorker
类的实例上调用它来证明)

3) 它是语法上的糖。编译器帮助您减少键入


在谷歌上搜索“events and delegates.net”会给出很多很好的解释。

您的问题的简短答案如下:

  • 事件处理程序对象不一定属于任何类。与任何其他对象一样,它们在框架中定义了一个适当的名称空间。可以在任何可以定义类的地方定义委托,因此可以将其放置在命名空间中或嵌套在另一个类中。位置只取决于什么是合理的。在您的特定示例中,属于
    System.ComponentModel
    命名空间,不嵌套在另一个类中

  • 是,在事件中,它也是
    System.ComponentModel
    命名空间的一部分

  • 是的,那速记很有效。您正在比较的两种格式通常被认为是相同的符号,并编译为相同的IL,因此如果您愿意,可以随意使用。实际上有一个很好的例子讨论了这个符号,就像我在一周前有一个同样的问题一样


  • 您的问题的简短回答如下:

  • 事件处理程序对象不一定属于任何类。与任何其他对象一样,它们在框架中定义了一个适当的名称空间。可以在任何可以定义类的地方定义委托,因此可以将其放置在命名空间中或嵌套在另一个类中。位置只取决于什么是合理的。在您的特定示例中,属于
    System.ComponentModel
    命名空间,不嵌套在另一个类中

  • 是,在事件中,它也是
    System.ComponentModel
    命名空间的一部分

  • 是的,那速记很有效。您正在比较的两种格式通常被认为是相同的符号,并编译为相同的IL,因此如果您愿意,可以随意使用。实际上有一个很好的例子讨论了这个符号,就像我在一周前有一个同样的问题一样

  • 反过来,委托就是一个类

    它不是一个类,它是一个类型。这就解释了你为什么要问这些问题。将其视为方法的类型描述,返回类型和参数很重要。委托类型帮助编译器确保您分配了正确类型的事件处理程序方法。该方法必须具有与委托类型完全相同的返回类型和参数。如果不是这样,编译器会抱怨。这种类型的安全性在.NET中非常重要

    “ProgressChangedEventHandler”属于哪一类

    它是委托类型,而不是类。它是在.NET framework中声明的。添加对System.dll的引用,并将
    using System.ComponentModel
    放在程序顶部,这样您就可以在不拼写完整类型名称的情况下使用它

    “进步改变”是一个事件吗

    是的,这是BackgroundWorker类的事件。除了DoWork和RunWorkerCompleted,您几乎总是订阅另外两个活动

    如果我没有指定“new ProgressChangedEventHandler”,代码仍然可以编译吗

    这就是所谓的“语法糖”。C#编译器可以从事件类型中判断需要何种委托类型,并根据需要自动生成语句的“new ProgressChangedEventHandler”部分。非常方便。然而,IntelliSense将始终生成它。即使完整语句是语法糖,也不会显式分配Delegate.Target属性。编译器根据目标方法是否为静态方法,将其推断为null或this

    反过来,委托就是一个类

    它不是一个类,它是一个类型。这就解释了你为什么要问这些问题。将其视为方法的类型描述,返回类型和参数很重要。委托类型帮助编译器确保您分配了正确类型的事件处理程序方法。该方法必须具有与委托类型完全相同的返回类型和参数。如果不是这样,编译器会抱怨。这种类型的安全性在.NET中非常重要

    “ProgressChangedEventHandler”属于哪一类

    它是委托类型,而不是类。它是在.NET framework中声明的。添加对System.dll的引用,并将
    using System.ComponentModel
    放在程序顶部,这样您就可以在不拼写完整类型名称的情况下使用它

    “进步改变”是一个事件吗

    是的,这是BackgroundWorker类的事件。连同DoWork和RunWorkerComple