C# 在类之间传递ManualResetEvent对象

C# 在类之间传递ManualResetEvent对象,c#,manualresetevent,C#,Manualresetevent,我的程序包含多个线程,我希望使用单个ManualResetEvent对象来控制这些线程。当我创建一个新对象(例如new ManualResetEvent MRE=new ManualResetEvent(args);)时,我希望所有类都可以访问MRE,但它总是很麻烦地将其作为参数传递。让它静止会更好吗?还是有更有效的方法-谢谢隐藏依赖项是错误的做法。如果所有类都需要相同的ManualResetEvent实例,将其作为依赖项添加并不麻烦,那么它就是预期的接口 对象的构造函数必须显示对象的依赖关系。

我的程序包含多个线程,我希望使用单个ManualResetEvent对象来控制这些线程。当我创建一个新对象(例如new ManualResetEvent MRE=new ManualResetEvent(args);)时,我希望所有类都可以访问MRE,但它总是很麻烦地将其作为参数传递。让它静止会更好吗?还是有更有效的方法-谢谢

隐藏依赖项是错误的做法。如果所有类都需要相同的
ManualResetEvent
实例,将其作为依赖项添加并不麻烦,那么它就是预期的接口


对象的构造函数必须显示对象的依赖关系。

将其推送到另一个具有manualresetevent的单例类。Yep ManualResetEvent仍然是singleton中的实例对象。这样你可以在任何地方使用它。但是请记住,静态对象的生命周期仍然是AppDomains的终点。@zenwalker考虑到您关于静态变量生命周期的最后陈述,考虑到我的程序打算在后台连续运行,我是否有其他选择?@jay,听起来我们可以通过一个例子更好地回答这个问题,说明您使用MRE的目的。您当然可以创建一个“全局静态”MRE,但这可能过于粗粒度,并且可能违反了使用它的类的一些设计最佳实践。@jaykreeler我的观点只是一个尖锐的提示。不是为了吓跑你。使用静电没有害处。但我们必须明智地使用它,否则我们以后可能不得不支付。现在在你的情况下,我想把它推到singleton之下是很好的。另一种方法是将与ManualResetEvent相关的每个ting加载到一个单独的AppDomain中,根据需要运行它,然后卸载该域。因此,您可以随时加载和卸载。但是,您必须编写跨域代码来共享数据。因此,为了避免这样做,只需使用singleton。