繁体   English   中英

从一个公共类调用静态参数到另一个公共类

[英]calling a static parameter from one public class to another

我正在尝试编写一个多线程的应用程序,我需要使用Monitoer.Enter/Exit/Wait/Pulse我已经创建了一个Lock对象并在它自己的类中使用它就像那样

public partial class domain 
    /*I dont sure this is the good practice way to mange DDD Layers (if anybody have a comment about it)*/
{

   Public class Peer2PeerCom
   {
    public static readonly object locker = new object();
    //other stuff here
    //...
    //somwhere here
    Monitor.Pulse(locker);
   }   
}

在另一个类我想要/需要使用这样的储物柜

public class Control
{
public domain.Peer2PeerCom Dom_P2PCom = new domain.Peer2PeerCom();
internal void connection ( int port , string IpAdress)
 {
  Monitor.Enter(Dom_P2PCom.locker);
  //do stuff here
  Monitor.wait(Dom_P2PCom.locker);
  //..
  Monitor.Exit(Dom_P2PCom.locker);
 }
}

但是当我尝试我无法识别locker ,我认为这是因为它是static但我不明白如何纠正它而不会使整个类静态

您正尝试通过引用访问静态成员。 幸运的是,这在C#中不起作用 - 它可能导致在允许的情况下使用非常误导的代码,例如在Java中。

相反,您应该使用类的名称来访问静态成员:

lock (domain.Peer2PeerCom.locker)
{
    ...
    // This should probably be in a while loop...
    Monitor.Wait(domain.Peer2PeerCom.locker);
}

(我使用了lock而不是显式调用Monitor.EnterMonitor.Exit - 它更惯用,更容易正确 - 在您给出的代码中,进入监视器后代码中的任何异常都会导致监视器被“泄露” - 你不会退出它。)

一般来说,我强烈建议不要将公共静态字段用于这样的共享锁。 这使得它更难推理什么用锁比,如果它是一个类中私有。 (我建议一般反对公共字段,以及类名中的下划线,没有特殊原因嵌套的类,以及domain的类名......)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM