Tag: 代表

C#中的委托语法问题

我构建了一个Testbox来了解Windows窗体应用程序中的线程。 Silverlight和Java提供了Dispatcher,它在更新GUI元素时非常有用。 代码示例:声明类代表 public delegate void d_SingleString(string newText); 创建线程 _thread_active = true; Thread myThread = new Thread(delegate() { BackGroundThread(); }); myThread.Start(); 线程function private void BackGroundThread() { while (_thread_active) { MyCounter++; UpdateTestBox(MyCounter.ToString()); Thread.Sleep(1000); } } 委派TextBox更新 public void UpdateTestBox(string newText) { if (InvokeRequired) { BeginInvoke(new d_SingleString(UpdateTestBox), new object[] { newText }); return; } tb_output.Text = newText; […]

循环中的匿名c#委托

大家好我想写和匿名代表。 因为整数变量在委托之间共享,我需要它作为每个委托的本地实例,这样rs [0]总是得到nics [0],rs [1]总是得到nics [1]等等…我能做到这一点吗? for (int i = 0; i < nics.Count; i++) { rs[i] = new RollingSeries(monitor, new RollingSeries.NextValueDelegate(delegate() { return GetNetworkUtilization(nics[i]); })); } 阿卜杜勒·卡利克

多播委托C#中的奇怪行为?

我有这个简单的事件: public class ClassA { public event Func Ev; public int Do(string l) { return Ev(l); } } 和2方法: static int Display(string k) { return k.Length; } static int Display_2(string k) { return k.Length*10; } 我正在注册这个活动: ClassA a = new ClassA(); a.Ev += Display; a.Ev += Display_2; 现在,我正在执行: Console.WriteLine(a.Do(“aaa”)); 输出 : 什么 ??? 他在调用列表中有2种方法! 它确实运行了它们,但为什么它只显示上次注册的结果? […]

代表们如何工作(在后台)?

代表们如何在幕后工作?如何有效地使用它们? 编辑:我知道他们如何在表面上工作(它们基本上是函数指针,并允许使用其地址调用某些签名的回调方法)。 我需要知道的是CLR如何在内部实际实现它们。 在定义委托时以及使用委托对象调用回调方法时,幕后究竟发生了什么?

在C#中编写全局自定义事件

我在这个窗体上有一个winform winform1和2个用户控件control1和control2 现在我想定义一个自定义事件 ,它在control1中被引发/触发并在control2中被接收。 该事件应该是全局的,而不是在control1中直接定义。 control2不应该知道control1的存在。 该事件也应由其他控件提出。 C#代码怎么样? 我需要像发布者类这样的东西吗?

具有未知类型的CreateDelegate

我正在尝试创建Delegate用于在运行时读取/写入未知类型的类的属性。 我有一个generics类Main和一个如下所示的方法: Delegate.CreateDelegate(typeof(Func), get) 其中get是应该读取的属性的MethodInfo 。 问题是当属性返回int (我猜这种情况发生在值类型中),上面的代码抛出了ArgumentException,因为该方法无法绑定。 在字符串的情况下,它运作良好。 为了解决这个问题,我更改了代码,以便使用MakeGenericType生成相应的Delegate类型。 所以现在的代码是: Type func = typeof(Func); Type generic = func.MakeGenericType(typeof(T), get.ReturnType); var result = Delegate.CreateDelegate(generic, get) 现在的问题是创建的generic委托实例所以我必须使用DynamicInvoke ,这与使用纯reflection来读取字段一样慢。 所以我的问题是为什么第一段代码失败了值类型。 根据MSDN,它应该像它说的那样工作 如果方法的返回类型比委托的返回类型更具限制性,则委托的返回类型与方法的返回类型兼容 以及如何在第二个片段中执行委托,以便它比reflection更快。 谢谢。

Func委托与function

有人可以告诉我使用委托的优势而不是如下所示调用函数本身(或者换句话说为什么选择选项A而不是选项B)? 我昨晚看了某人的linq代码,他们有类似于Option A的东西,但它被用来返回编译的linq查询。 我意识到前者现在可以转移到其他function……只是不确定它的实用性。 顺便说一句,我意识到这不会按原样编译..在发布之前取消注释其中一个function。 TYIA class Program { static void Main(string[] args) { Console.WriteLine(SayTwoWords(“Hello”, “World”)); Console.ReadKey(); } // Option A private static Func SayTwoWords = (a, b) => String.Format(“{0} {1}”, a, b); // Option B private static string SayTwoWords(string a, string b) { return String.Format(“{0} {1}”, a, b); } } ************编辑************ 不确定它是否更好地解释了我的问题,但这里是一个最初让我思考这个问题的代码类型的例子: public static […]

Func .BeginInvoke是否使用ThreadPool?

当您在C#中调用Func委托(或Action代理)上的BeginInvoke方法时,运行时是否使用ThreadPool或生成新线程? 我几乎可以肯定它会使用ThreadPool,因为这是合乎逻辑的事情,但如果有人能证实这一点,我会很感激。 谢谢,

代表行动

我正在尝试创建一个带有ref参数的静态方法的委托。 请不要问我为什么要做这样的蠢货。 这是学习.Net,C#和reflection工作以及如何优化它的全部内容。 我的代码是: public struct DataRow { private double t; static public void Cram_T(ref DataRow dr, double a_t) { dr.t = a_t; } } ”” Type myType = typeof(DataRow); MethodInfo my_Cram_T_Method = myType.GetMethod(“Cram_T”); var myCram_T_Delegate = Delegate.CreateDelegate(typeof(Action), my_Cram_T_Method) as Action; 这给了我一个绑定错误,因为(我认为)generics操作与方法不匹配。 检查监视窗口中Cram_T_Method的值 {Void Cram_T(DataRow ByRef, Double)} 然后我尝试在Action中使用ref关键字: var myCram_T_Delegate = Delegate.CreateDelegate(typeof(Action), my_Cram_T_Method) as Action; […]

C#:使用布尔返回类型创建多播委托

Hai Techies, 在C#中,我们如何定义接受DateTime对象并返回布尔值的多播委托。 谢谢