使用C#,我有一个方法,其中我有这个代码(名称被更改)-
private void func(...)
{
ClassName c = new ClassName();
c.EventName += delegate
{
//do some work
};
}
现在,当该方法退出时,事件处理程序将被垃圾收集,还是将保留在内存中?
我已经在我的WPF应用程序中跟踪了C#代码,并且有一个关于分离事件的问题。
public class Publisher
{
public event EventHandler Completed;
public void Process()
{
// do something
if (Completed != null)
{
Completed(this, EventArgs.Empty);
}
}
}
public class Subscriber
{
publ
我正在阅读“第一设计模式”( Head First )一书,并尽力将代码从他们的Java转换成C#。在这本书中讨论了观察者模式之后,它提到Java有类/接口内置,.NET4也是如此。因此,我开始研究如何正确地使用它,除了Subscribe()方法之外,我已经解决了其中的大部分问题。
如果在尝试订阅时查看IObserver,则该方法将返回一个IDisposable。为什么有必要这么做?为什么不直接实现一个基于方法参数不对IObserver进行描述的方法呢?。我也读过这篇文章,但不太明白它想告诉我的是什么:
它返回对IDisposable接口的引用。这使观察者能够在提供者发送完通知并调用订阅者的
我正在阅读有效的C#,我发现了以下改进事件调用行为并使其线程安全的模式:
public class EventSource {
private EventHandler<int> Updated;
private int counter;
public void RaiseUpdates(){
counter++;
var handler = Updated;
if (handler != null){
handler(this, co
在c#中订阅(+=)和取消订阅(-=)委托的复杂性是什么? namespace MulticastDelegateDemo
{
public delegate void MathDelegate(int No1, int No2);
public class Program
{
public static void Add(int x, int y)
{
Console.WriteLine("THE SUM IS : " + (x + y));
}
public
在C#/Unity中,是否有一种方法可以将更多的参数传递给委托中未指定的事件处理程序?
假设我不能修改委托。(它来自外部类。)
我需要能够做到这一点,以便以后可以从我的处理程序(代码中的其他地方的onClick -= HandleClick)中取消订阅。
示例:
delegate void A(str s);
event A onClick;
Awake() {
onClick += HandleClick;
}
void HandleOnClick(str s, int a) {
// How to get access to this second argument a he
我有这样的密码:
public class SomeClass
{
int _processProgress;
public int ProcessProgress
{
get { return _processProgress; }
set
{
_processProgress = value;
if (ProcessProgressChanged != null)
ProcessProgressChanged(value);
我想确认一些事情--当我将一个方法注册为一个事件的订阅者时,就像这样:
_serviceContext.ReadingEntity += new EventHandler<ReadingWritingEntityEventArgs>(_serviceContext_ReadingEntity);
如果我不想在触发事件时继续调用该方法,则需要从该事件的订阅中注销该方法,如下所示:
_serviceContext.ReadingEntity -= new EventHandler<ReadingWritingEntityEventArgs>(_serviceContext_
我编写了一个测试,它显示在调用事件时,所有处理程序都被调用,即使其中一个处理程序(不是最后一个)取消订阅所有处理程序。
该测试在中进行,并在下面重复。
我的问题是:这种行为是否被期望和记录下来(我没有发现任何提及),它能被指望吗?还是因为我写考试的方式有一些特殊之处?
namespace EventUnsubscriptionTest
{
using System;
using NUnit.Framework;
public class EventSource
{
public event Action Event;
pub
我想知道我是否可以以一种安全的方式在一行代码中取消订阅C#操作,而不必编写以下代码:
if(publisher.RaiseCustomEvent != null)
{
publisher.RaiseCustomEvent -= HandleCustomEvent;
}
一个简单的例子:
public class Publisher
{
public Action RaiseCustomEvent;
public MyClass() { }
}
public class Subscriber
{
Publisher _publisher;
publi
下面的代码片段来自于书中的有效C#,
public event AddMessageEventHandler Log;
public void AddMsg ( int priority, string msg )
{
// This idiom discussed below.
AddMessageEventHandler l = Log;
if ( l != null )
l ( null, new LoggerEventArgs( priority, msg ) );
}
AddMsg方法展示了引发事件的正确方法。是引用日志事件处理程序的临时变
我有以下代码:
public List<IWFResourceInstance> FindStepsByType(IWFResource res)
{
List<IWFResourceInstance> retval = new List<IWFResourceInstance>();
this.FoundStep += delegate(object sender, WalkerStepEventArgs e)
{
if (e
我需要一些关于这类场景的最佳实践的建议。我找了,但找不到满意的答案。
我们在winforms项目中使用第三方(.net)动态链接库。它引发了一些事件,我们同意。问题是,我是否需要在类中显式取消订阅这些事件?
顺便说一句,我们都使用.net框架4,谢谢您的建议。
一些样本代码..。
public class MyClientCode: IDisposable
{
private readonly 3rdParty.TheirClass _theirClass;
public MyClientCode()
{
_theirClass = new _theirClass()
最近,我问了一个问题,如何将我在互联网上找到的代码示例从C#转换到VB中,并向我提供了自动代码翻译网站( & )的链接。我对VB非常陌生,不幸的是,翻译器返回的VB没有在Visual 2010中编译。我希望有人能帮我修复VB代码的非工作部分。
下面是我要转换成VB的C#代码:
namespace WCFCallbacks
{
using System;
using System.ServiceModel;
[ServiceContract(CallbackContract = typeof(IMessageCallback))]
public inte
在书中关于c#事件的章节中有代码示例:
class CountDown
{
private uint _seconds;
public CountDown(uint seconds)
{
_seconds = seconds;
}
public void Start()
{
new Thread(() =>
{
uint n = _seconds;
while (n > 0u)
{
v
我被问到一个关于事件的非常有趣的问题。我想答案是否定的,但我很好奇是否有一种我不知道的方法。
在下一个代码示例中,我可以从引用类B或它的方法X中删除订阅吗?
Class1 A = new Class1();
Class2 B = new Class2();
A.DoneIt += B.X;
这意味着在不访问A类的情况下执行A.DoneIt -= B.X; (也不是通过在A类上进行反射)。