MsgMgr.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System;
  2. using System.Collections.Concurrent;
  3. using System.Threading;
  4. namespace StageController
  5. {
  6. public class MyMessage
  7. {
  8. private int m_msg;
  9. private object m_parm1;
  10. private object m_parm2;
  11. public int Msg
  12. {
  13. get { return m_msg; }
  14. set { m_msg = value; }
  15. }
  16. public object Parm1
  17. {
  18. get { return m_parm1; }
  19. set { m_parm1 = value; }
  20. }
  21. public object Parm2
  22. {
  23. get { return m_parm2; }
  24. set { m_parm2 = value; }
  25. }
  26. public MyMessage(int msg, object parm1, object parm2)
  27. {
  28. this.m_msg = msg;
  29. this.m_parm1 = parm1;
  30. this.m_parm2 = parm2;
  31. }
  32. }
  33. public class MsgMgr
  34. {
  35. private AutoResetEvent m_event = new AutoResetEvent(false);
  36. private ConcurrentQueue<MyMessage> m_msg = new ConcurrentQueue<MyMessage>();
  37. private bool m_running = false;
  38. public Action<int, object, object> MessageProcess
  39. {
  40. get;
  41. set;
  42. }
  43. public void EndLoop()
  44. {
  45. m_running = false;
  46. }
  47. public void SendMsg(int msg, object parm1, object parm2)
  48. {
  49. m_msg.Enqueue(new MyMessage(msg, parm1, parm2));
  50. }
  51. public void MsgLoop()
  52. {
  53. m_running = true;
  54. while (m_running)
  55. {
  56. Thread.Sleep(50);
  57. MyMessage msg;
  58. if (m_msg.TryDequeue(out msg) && MessageProcess != null)
  59. {
  60. MessageProcess(msg.Msg, msg.Parm1, msg.Parm2);
  61. }
  62. }
  63. }
  64. }
  65. }