Tag: 代表

C#代表

我在理解C#中的委托如何工作方面遇到了一些麻烦。 我有很多代码示例,但我仍然无法正确掌握它。 有人能用“普通英语”向我解释一下吗? 当然! 代码的例子会有所帮助,但我想我需要更多地描述它是如何/为什么有效的。 编辑: 那么,问题是:为什么代表们工作? 什么是整个过程的“流程图”? 使用代表的先决条件是什么? 我希望这会使问题更清楚。

我可以在Entity Framework的Where方法中使用自定义委托方法吗?

Where(this IQueryable source, Expression<Func> predicate); 我将参数传递给Where方法,如下所示: f => f.Id > 4 。 我可以传递委托方法而不是f.Id > 4吗?

非委托类型的事件

我已经实现了一个看起来像这个接口的类: [ImmutableObject(true)] public interface ICustomEvent { void Invoke(object sender, EventArgs e); ICustomEvent Combine(EventHandler handler); ICustomEvent Remove(EventHandler handler); ICustomEvent Combine(ICustomEvent other); ICustomEvent Remove(ICustomEvent other); } 此CustomEvent类的工作方式与MulticastDelegate非常相似。 它可以调用。 它可以与另一个CustomEvent结合使用。 并且可以从另一个CustomEvent中删除CustomEvent。 现在,我想声明一个这样的类: class EventProvider { public event CustomEvent MyEvent; private void OnMyEvent() { var myEvent = this.MyEvent; if (myEvent != null) myEvent.Invoke(this, EventArgs.Empty); } } 不幸的是,这段代码无法编译。 出现编译器错误CS0066: ‘EventProvider.MyEvent’:事件必须是委托类型 […]

使用委托从C#调用IronRuby

是否可以使用委托作为参数从C#调用IronRuby方法,以便yield可以工作? 以下给出了错误数量的参数(1表示0)exception。 Action action = Console.WriteLine; var runtime = Ruby.CreateRuntime(); var engine = runtime.GetEngine(“rb”); engine.Execute(@” class YieldTest def test yield ‘From IronRuby’ end end “); object test = engine.Runtime.Globals.GetVariable(“YieldTest”); dynamic t = engine.Operations.CreateInstance(test); t.test(action);

使用.NET / C中的委托加速Reflection API

if you need to call the method multiple times, use reflection once to find it, then assign it to a delegate, and then call the delegate.此post有注释if you need to call the method multiple times, use reflection once to find it, then assign it to a delegate, and then call the delegate. 。 该delegate如何以及为何更快地运作? 谁能有一些例子吗? 我可以称之为caching吗? […]

如何在后台加载图像?

我正在尝试在后台加载图像,然后更新UI。 我整天都在玩这个,我不知道我错过了什么。 我一直收到以下错误: “调用线程无法访问此对象,因为不同的线程拥有它。” 我已经在示例后跟随示例,但我似乎无法找到答案。 我还在另一个BeginInvoke中包含了触摸UI的代码。 更新3:故事的寓意。 ImageSource对于访问不是线程安全的。 更新2:这必须是一个简单的解决方案:)。 我尝试了克隆,但这并没有带来成功,但我确实得到了一个不同的错误:“调用目标引发了exception。” 更新1:我尝试了BackgroundWorker,但我仍然得到相同的错误,但它发生在brush.ImageSource.Height上。 我是否正确地通知了用户界面? 有什么建议? 这是我的XAML: 以下是一些背后的代码: namespace Slideshow { public class Show { public Show() { BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += new DoWorkEventHandler(bw_DoWork); bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); bw.RunWorkerAsync(); } void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { BitmapSource bitmap = e.Result as BitmapSource; if (bitmap != […]

代表协方差混乱难题!

为什么这不起作用? 我不能正确理解代表协方差吗? public delegate void MyDelegate(object obj) public class MyClass { public MyClass() { //Error: Expected method with ‘void MyDelegate(object)’ signature _delegate = MyMethod; } private MyDelegate _delegate; public void MyMethod(SomeObject obj) {} }

通过reflection为任何事件类型订阅操作

考虑: someControl.Click += delegate { Foo(); }; 事件的论点是无关紧要的,我不需要它们,我对它们不感兴趣。 我只想让Foo()被调用。 通过reflection没有明显的方法来做同样的事情。 我想将上述内容翻译成类似的内容 void Foo() { /* launch missiles etc */ } void Bar(object obj, EventInfo info) { Action callFoo = Foo; info.AddEventHandler(obj, callFoo); } 此外,我不想假设传递给Bar的对象类型严格遵守使用事件的EventHander(TArgs)签名的指导原则。 简单地说,我正在寻找一种方法来将Action订阅到任何处理程序类型; 简而言之,一种将Action委托转换为预期处理程序类型的委托的方法。

C#在自己的线程中执行的线程之间的事件(如何)?

我想要两个主题。 我们打电话给他们: 线程A. 线程B 线程A触发事件,线程B侦听此事件。 执行线程B事件侦听器时,它是使用线程A的线程ID执行的,所以我猜它是在线程A中执行的。 我想做的是能够向线程B发起事件,例如:“嘿,数据已准备就绪,你现在可以处理它”。 此事件必须在其自己的Thread中执行,因为它使用只有他可以访问的内容(如UI控件)。 我怎样才能做到这一点 ? 谢谢你的帮助。

在方法内创建委托类型

我想在方法中的C#中创建一个委托类型,以便创建匿名方法。 例如 : public void MyMethod(){ delegate int Sum(int a, int b); Sum mySumImplementation=delegate (int a, int b) {return a+b;} Console.WriteLine(mySumImplementation(1,1).ToString()); } 不幸的是,我不能在.NET 2.0和C#2.0中这样做。