Tag: 委托

用户控件之间的ASP.NET事件委派

在ASP.NET页面上提供以下控件层次结构: 页 HeaderControl( 用户控件 ) TitleControl( 服务器控件 ) TabsControl( 用户控件 ) 其他控件 我正在尝试在TitleControl中引发一个事件(或一些通知),它会冒泡到Page级别。 然后,我想(可选) 在Page codebehind注册一个事件处理程序,它将采用EventArgs并修改上面示例中的TabsControl。 需要注意的重要一点是,这个设计允许我将这些控件放到任何页面中,并在事件处理程序连线时使整个系统无缝地工作。 该解决方案不应该涉及对FindControl()的调用,因为它成为一个强大的关联。 如果在包含的页面中没有定义处理程序,则事件仍由TitleControl引发但不处理。 我的基本目标是使用基于事件的编程,以便我可以将用户控件彼此分离。 TitleControl中的事件仅在某些情况下引发,这似乎是(在我的脑海中)首选方法。 但是,我似乎无法找到一种干净利落的方法。 以下是我的(差)尝试: 使用HttpContext.Current.Items 将EventArgs添加到TitleControl上的Items集合中,并在TabsControl上将其拾取。 这可行,但由于两个控件之间的连接不明显,因此从根本上难以破译。 使用reflection 而不是传递事件,直接在TitleControl中查找容器页面上的函数,如: Page.GetType().GetMethod(“TabControlHandler”).Invoke(Page, EventArgs); 这将起作用,但方法名称必须是一个常量,所有Page实例必须逐字定义。 我确信我过度思考这个问题并且必须有一个更漂亮的解决方案使用委托,但我似乎无法想到它。 有什么想法吗?

是否可以同步调用异步调用?

我已经在我想要做的事情下面放了一些非常基本的代码。 我有’DoSomethingAshnc’方法执行异步操作。 我希望’DoSomething’方法是一个不接受action参数并返回int的同步方法。 public void DoSomething(Action actionToPerformOnComplete) { DoSomethingAsync(delegate(int val) { actionToPerformOnComplete(val); }); } 是否甚至可以让’DoSomething’返回一个整数,就像方法同步发生一样?

如何将此Func转换为表达式?

我正在玩表达树,并试图更好地了解它们的工作原理。 我写了一些我正在使用的示例代码,希望有人可以帮助我。 所以我有一个有点凌乱的查询: /// /// Retrieves the total number of messages for the user. /// /// The name of the user. /// True if retrieving the number of messages sent. /// The total number of messages. public int GetMessageCountBy_Username(string username, bool sent) { var query = _dataContext.Messages .Where(x => (sent ? x.Sender.ToLower() : x.Recipient.ToLower()) == […]

注册计时器已过去的事件

我想创建一个初始化计时器的类,该计时器将用作其他类成员的中心核心,以便为计时器已用事件注册自己。 我的问题是我真的不知道如何将计时器已用事件暴露给其他类。 我认为可能有效的一个解决方案是,我只是将计时器公开为公共属性,它将返回计时器对象,我可以从该对象调用timer elapsed事件,例如: MyAppTimer appTimer = new MyAppTimer(); Timer timer = appTimer.GetAppTimer; timer.Elapsed += SomeMethod; 但是通过这个解决方案,我将暴露出我不想要的整个计时器。 如何传入MyAppTimer类中的方法,该方法将在内部使用计时器的已用事件注册该方法? 是否与代表有关? 也许是这样的: public void RegisterHandler(someStuffGoesHere) //What do I pass in here? { timer.Elapsed += someStuffGoesHere; }

在C#中获得系统时钟更改刻度

当秒,分钟,小时……在系统时钟中发生变化时,它们是在C#中执行delegate或event的方法,而不使用计时器检查属性是否已更改并且延迟执行事件时每毫秒检查一次最大毫秒。 因此,我想避免在某个时间进行投票和发射事件。

C#委托定义 – 匿名方法与正式定义的方法

何时应该在定义委托时使用匿名方法,何时应该在定义委托时使用正式定义的方法?

EventHandlers和Covariance

我一直在尝试创建一个通用事件。 基本上它应该是这样的: namespace DelegateTest { class Program { static void Main(string[] args) { var lol = new SomeClass(); lol.SomeEvent += handler; } static void handler(object sender, SomeDerivedClass e) { } } class SomeClass { public delegate void SomeEventDelegate(object sender, T data); public event SomeEventDelegate SomeEvent; } interface ISomeInterface { } class SomeDerivedClass : ISomeInterface { […]

防止非托管函数指针垃圾回收

将代理转换为非托管代码的文档说明我自己负责阻止代理收集。 我想知道在非管理呼叫是否有效的情况下是否无法收集代表。 例如,如果我这样做 UnmanagedFunction(arg => somebody); 其中UnmanagedFunction不存储超出其调用的函数指针。 这应该是合法的,对吧? 在UnmanagedFunction正在执行时,CLR无法收集。

将一个对象的方法传递给另一个对象是否保持第一个对象存活?

假设我有三个对象:’a’,’b’和’c’。 对象’a’和’c’是长寿命的,静态引用的服务单例。 对象’b’是短暂的,即没有静态引用使其保持活动状态。 现在假设对象’a’在其一个方法的范围内创建对象’b’的实例,例如 B b = new B(); 进一步假设B类看起来像这样: public B () { C.ActionList.Add ( SomeMethod ); } void SomeMethod () { … } 现在,对象’b’存活了多长时间? 我的推测是,它超出了调用其构造函数的方法的范围; 具体来说,只要它的方法仍然在对象’c’的’ActionList’中。 那是对的吗? 如果没有,它会被垃圾收集,当’c’运行’ActionList’中的所有方法时会发生什么? 额外的问题:如果’b’上的方法没有命名,但匿名并在构造函数中写入如下,该怎么办? public B () { C.ActionList.Add ( () => { … } ); }

使用变量generics委托类型对operator ==进行重载解析

在两个委托类型表达式之间使用==进行重载解析的精确规则是什么? 请考虑以下代码(需要using System; ): static class ProgramA { static void TargetMethod(object obj) { } static void Main() { Action instance1 = TargetMethod; Action instance2 = TargetMethod; Action a1 = instance1; Action a2 = instance2; Console.WriteLine((object)a1 == (object)a2); Console.WriteLine((Delegate)a1 == (Delegate)a2); Console.WriteLine((Action)a1 == (Action)a2); Console.WriteLine(a1 == a2); // warning CS0253: Possible unintended reference comparison; to get […]