日期:2014-05-17  浏览次数:20803 次

一段C#代码 求分析
Object lockObject = new Object();
private void button1_Click(object sender, EventArgs e)
{
  string hostname = "localhost";
  int port = 57410;
  lock(lockObject)
  {
    if(NPHardwareManager.Instance.OpenHardware(hostname, port, new
NPNetworkClientCallbackDelegate(CommunicationAvailable)))
    {
      NPHardwareManager.Instance.InitializeHardware();
      NPHardwareManager.Instance.InitializeRamanEleven();
      NPHardwareManager.Instance.GetClient().ReceiveUDPPacketCallback
+= new NPNetworkClientCallbackDelegate(ReceiveUDPPacket);
    }
  }
}
private void CommunicationAvailable(NPNetworkClient client)
{
  try
  {
    lock(lockObject)
    {
      InitializeHardware();
    }
  }catch(Exception ex)
  {
    MessageBox.Show(ex.Message);
  }
}
如上所示,lockObject 的作用是什么?好像并不是具体的对象。ReceiveUDPPacket回调函数是不是必须在多线程下才能正常调用,求高手解答
C# 多线程 对象

------解决方案--------------------
lockObject代表你希望跟踪的对象,通常是对象引用。
应该是鼠标点击的时候获得的对象把

------解决方案--------------------
这些问题,自己去看看msdn关于lock的介绍,就清楚了。

lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。此语句的形式如下:
Object thisLock = new Object();
lock (thisLock)
{
    // Critical code section
}
------解决方案--------------------
引用:
这些问题,自己去看看msdn关于lock的介绍,就清楚了。

lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。此语句的形式如下:
Object thisLock = new Object();
lock (thisLock)
{
    // Critical code section
}

这是一个明白人。1L瞎掰。