Tag: 委托

当两个线程都不是WinForm时,在两个线程之间引发事件

我找不到ac#example,它显示了如何在以下条件中引发跨线程事件: 假设我有1个事件和3个线程: 事件DoStuff 线程A – WinForm 线程B – 从线程A产生的线程进行一些处理。 具有订阅DoStuff的Function Foo() 线程C – 从线程B产生的线程进行一些子处理和引发事件DoStuff 现在,我如何确保在线程C中引发的事件是在线程B内而不是C或A中处理的。 我运行的所有示例都提示向Form / Control.Invloke,或者那种类型的东西,我真的想要拥有实际订阅事件的任何线程在它的repsective线程内执行,而不仅仅是主表单线程。

使用MulticastDelegate作为参数,同时避免使用DynamicInvoke

我有一个MulticastDelegate ,可以引用具有相同签名的许多(遗留)代理之一。 例如: public delegate void ObjectCreated(object sender, EventArgs args); public delegate void ObjectDeleted(object sender, EventArgs args); //… 然后,这些代表用于定义事件: public event ObjectCreated ObjectWasCreated; public event ObjectDeleted ObjectWasDeleted; 然后我有一个方法,它接受我用来做一些常见检查的MulticastDelegate : void DispatchEvent(MulticastDelegate handler, object sender, EventArgs args) { if (handler != null) { // … handler.DynamicInvoke(sender, args); } } 这是从定义事件的类的其他方法中调用的: DispatchEvent(ObjectWasCreated, sender, args); DispatchEvent(ObjectWasDeleted, sender, args); […]

如何在C#中实现C ++样式函数指针,而不使用委托

我正在学习C#中的指针,并且好奇如果可以在C#中使用C ++样式函数指针。 是的,我知道C#有自己的等效function指针概念(称为委托)。 但我只是想知道使用C#中的指针是否可以实现相同,而不使用委托。 如果在C#中使用指针完全合法(使用不安全选项)并且指针语义几乎与C / C ++类似,那么在我看来,也应该能够使用C / C ++样式函数指针。 请指导我这个。 可能吗? 如果是的话怎么样?如果不是那么为什么? 请注意C#和C / C ++中指针使用的相似性,如下例所示 /* Using pointers in C# (Very similar to C/C++) */ using System; namespace UnsafeCodeApplication { class TestPointer { public unsafe static void Main() { int[] list = {10, 100, 200}; fixed(int *ptr = list) /* let us […]

在使用BeginInvoke和EndInvoke时,如何避免传递/存储委托?

编辑 :将实际问题移至顶部。 更新 :发现微软的一个例子,最后隐藏了一些代码。 我的问题是这些: 在同一个委托实例上调用多个BeginInvoke调用是否安全,或者我是否必须为每个正在进行的方法调用构建一个新的委托实例? 如果我必须为每个实例构造新实例,是否有某种方法可以从IAsyncResult值中获取原始委托? 是否有其他更好的方法来为我的类添加异步支持而不是使用委托? 更多信息如下。 我正在为我的一类添加异步支持,并且认为我会这么做。 上这堂课: public class Calculator { public Int32 Add(Int32 a, Int32 b) { return a + b; } } 我以为我可以这样做: public class Calculator { private delegate Int32 AddDelegate(Int32 a, Int32 b); public Int32 Add(Int32 a, Int32 b) { return a + b; } public IAsyncResult BeginAdd(Int32 […]

表达式树深度限制

我正面临一个问题,试图在Expression <Func >类型的LambdaExpression上调用Compile(),其深度大约为400.较小的值不会导致任何问题。 我找不到任何关于这种限制的事情。 任何人都可以澄清这个吗? 我可以增加这个限额吗? upd:对不起,忘了提,我得到了StackOverflowException: System.Core.dll中出现未处理的“System.StackOverflowException”类型exception{无法计算表达式,因为当前线程处于堆栈溢出状态。}

如何将委托或函数指针从C#传递给C ++并使用InternalCall在那里调用它

我在C#中进行了以下设置: public delegate void CallbackDelegate(string message); [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern void setCallback(CallbackDelegate aCallback); public void testCallbacks() { System.Console.Write(“Registering C# callback…\n”); setCallback(callback01); } public void callback01(string message) { System.Console.Write(“callback 01 called: ” + message + “\n”); } 这在C ++中(该函数通过mono_add_internal_call正确注册): typedef void (*CallbackFunction)(const char*); void setCallback(MonoDelegate* delegate) { // How to convert the MonoDelegate to a proper […]

委托作为扩展方法的第一个参数

女士和男士, 我最近尝试过这个实验: static class TryParseExtensions { public delegate bool TryParseMethod(string s, out T maybeValue); public static T? OrNull(this TryParseMethod tryParser, string s) where T:struct { T result; return tryParser(s, out result) ? (T?)result : null; } } // compiler error “‘int.TryParse(string, out int)’ is a ‘method’, which is not valid in the given context” var […]

如何删除所有eventhandler

让我们说我们有一个代表 public delegate void MyEventHandler(string x); 和一个事件处理程序 public event MyEventHandler Something; 我们添加了多个事件.. for(int x = 0; x <10; x++) { this.Something += HandleSomething; } 我的问题是..如何从事件处理程序中删除所有方法,假设一个人不知道它已被添加10次(或更多或更少)次?

序列化组合的function?

这很好用: Func func1 = s => s + “func”; ViewState[“function”] = func1; 但是,这不是: Func func1 = s => s + “func”; Func func2 = s => func1(s); ViewState[“function”] = func2; 它抛出运行时序列化exception: Type ‘MyProjectName._Default+c__DisplayClass3’ in Assembly ‘MyProjectName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’ is not marked as serializable. 现在,我可以解决这个问题,但是我想了解为什么会发生这种情况,以便将来除了在序列化之前编写函数之外我别无选择,我会有一个解决方案。

我什么时候在asp.net中使用委托?

我一直在寻找一种方法来使用我能够使用的所有工具,并将自己伸展到我所处的位置之外。 但是,尽管我已经阅读过有关代表的内容,但我找不到使用它们的地方(比如Interfaces,Generics和很多东西,但我离题了。)我希望有人可以告诉我他们何时以及如何使用代表在asp.net c#(2.0及以上版)的网页编程中。 谢谢,如果Stack Overflow出错,请告诉我。