【发布时间】:2013-12-10 20:56:48
【问题描述】:
考虑以下程序:
class Program
{
static void Main(string[] args)
{
var MyEventThrower = new EventThrower();
var log= new List<string>();
log.Add("Log Initialized");
MyEventThrower.Event += LogEvent;
MyEventThrower.RaiseEvent();
foreach (var item in log)
{
Console.WriteLine(item);
}
}
static void LogEvent(object sender, EventArgs e)
{
log.Add(sender.ToString()); //obviously doesn't work,
//but this is the sort of
//behavior I want to achieve.
}
}
供参考:
public delegate void EventHandler(object sender, EventArgs e)
public class EventThrower
{
public event EventHandler Event;
protected virtual void OnEvent(EventArgs e)
{
if (Event!= null)
{
Event(this, e);
}
}
public void RaiseEvent()
{
OnEvent(EventArgs.Empty);
}
}
编辑:我的问题是日志与事件处理程序不在同一个上下文中。我现在看到我可以通过使其成为静态类成员来解决这个问题。
【问题讨论】:
-
预期的行为是什么?当我运行你的程序时,它执行了
LogEvent方法。显然是在纠正了一些错别字之后。 -
您能够在事件处理程序中使用
log.Add()方法运行程序吗?log在这种情况下不存在。你怎么修好它的?另外,我现在纠正一下错别字。我在 SO Question 框中输入了这个程序,我不应该这样做 =P -
它们不在不同的线程中执行。目前还不清楚您要解决什么问题,因为除了将“log”变量设为静态类成员之外别无他法。
-
出于某种原因,在我的客户端应用程序中,我觉得让我的外部资源成为静态类成员会阻止我做我想做的事情,但我现在意识到我错了.将其设为静态类成员即可解决问题。
-
另一种方法是使用您需要操作的对象填充发送者和事件参数
标签: c# multithreading events