Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# 为什么有人想使用Invoke()(而不是BeginInvoke())?_C#_.net_Delegates_Invoke_Begininvoke - Fatal编程技术网

C# 为什么有人想使用Invoke()(而不是BeginInvoke())?

C# 为什么有人想使用Invoke()(而不是BeginInvoke())?,c#,.net,delegates,invoke,begininvoke,C#,.net,Delegates,Invoke,Begininvoke,我被告知调用类似于普通的方法调用。。。那么为什么人们会选择使用Invoke而不是普通的方法调用呢 我试着在网上搜索这个问题,我得到的是使用BeginInvoke的好处,但是使用Invoke有什么好处呢?当您想在从线程池中提取的线程上异步调用委托时,请使用BeginInvoke;如果您想同步调用委托,请使用Invoke。当您想在从线程池中提取的线程上异步调用委托时,请使用BeginInvoke;如果您想调用委托,请使用Invoke同步执行。一个原因是,如果您通过反射获得了方法签名,并且您动态地想要

我被告知调用类似于普通的方法调用。。。那么为什么人们会选择使用Invoke而不是普通的方法调用呢


我试着在网上搜索这个问题,我得到的是使用BeginInvoke的好处,但是使用Invoke有什么好处呢?

当您想在从线程池中提取的线程上异步调用委托时,请使用BeginInvoke;如果您想同步调用委托,请使用Invoke。

当您想在从线程池中提取的线程上异步调用委托时,请使用BeginInvoke;如果您想调用委托,请使用Invoke同步执行。

一个原因是,如果您通过反射获得了方法签名,并且您动态地想要实例化一个函数,那么调用就是这样做的方式

一个原因是,如果您通过反射获得了方法签名,并且您动态地想要实例化一个函数,那么调用就是这样做的方式

以更改,例如,执行某个内容的线程


请注意,实际上,任何UI控件都只能从创建它的线程进行操作。因此,如果另一个线程从另一个线程的角度同步操作控件,那么BeginInvoke将是额外的开销,但Invoke是可以的,特别是因为至少在WPF中,这里有一个多调用序列的快捷方式,可以加快内部执行。

例如,为了更改,执行某事物的线程


请注意,实际上,任何UI控件都只能从创建它的线程进行操作。因此,如果另一个线程从另一个线程的角度同步操作控件,那么BeginInvoke将是额外的开销,但是Invoke很好,特别是因为至少在WPF中,这里有一个用于多个调用序列的快捷方式,可以加快内部执行。

我想您已经了解委托是什么,它的用途以及为什么有用了


如果我有一个名为MyDelegate的deletegate,我可以执行MyDelegatefoo;或MyDelegate.Invokefoo,但是我总是使用第二个,这样我在查看代码时可以很容易地看到,它实际上是一个委托,而不是一个方法。没有内部差异。

我想您已经理解了委托是什么、用于什么以及为什么有用


如果我有一个名为MyDelegate的deletegate,我可以执行MyDelegatefoo;或MyDelegate.Invokefoo,但是我总是使用第二个,这样我在查看代码时可以很容易地看到,它实际上是一个委托,而不是一个方法。没有内部差异。

首先值得注意的是,我们必须有类似.Invoke的东西作为语言之间的汇合点。正如int到C和Integer到VB.NET一样,System.Int32对于这两种语言和任何其他CLR语言都是如此;我们也调用了任何CLR语言可以提供的访问,然后他们可以在一个适合他们的语法的方法中提供额外的语法糖,大多数人会在VB中考虑大量的VB风格的约定,或者在VB中大量的C风格约定作为句法醋;糖总是要尽可能地与语言的其他部分相匹配


加了这种糖,为什么不一直用呢?有些人有时会想弄清楚他们是在和一名代表打交道。有些人就是不使用它;我基本上没有。像所有的语法糖一样,优点和缺点都是清晰性而不是正确性的问题。事实上,看看对x的调用。在reflector中调用,你会发现它是x,因为reflector不知道你使用了哪个。首先值得注意的是,我们必须有类似的东西。Invoke作为语言之间的汇合点。正如int到C和Integer到VB.NET一样,System.Int32对于这两种语言和任何其他CLR语言都是如此;我们也调用了任何CLR语言可以提供的访问,然后他们可以在一个适合他们的语法的方法中提供额外的语法糖,大多数人会在VB中考虑大量的VB风格的约定,或者在VB中大量的C风格约定作为句法醋;糖总是要尽可能地与语言的其他部分相匹配


加了这种糖,为什么不一直用呢?有些人有时会想弄清楚他们是在和一名代表打交道。有些人就是不使用它;我基本上没有。就像所有的语法糖一样,优点和缺点实际上是清晰而不是正确的问题,查看对x的调用。在reflector中调用,您将看到它是x,因为reflector不知道您使用了哪个。

当您使用BeginInvoke时,线程池被使用,不建议用于长时间运行的过程…当您使用BeginInvoke时,线程池被使用,不建议用于长时间运行的过程…可能重复您是否知道不需要添加额外的“Invoke”就可以知道它是委托而不是代理
一种方法?你可以将鼠标悬停在它上面,或者按F12键。我知道:D,但我想知道,只要快速阅读代码:你知道你不需要额外的“调用”来知道它是一个委托而不是一个方法吗?你可以将鼠标悬停在上面,或者按F12键。我知道:D,但我想知道,只要快速阅读代码: