MainWindow.xaml.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using System;
  2. using System.Diagnostics;
  3. using System.Linq;
  4. using System.Runtime.Remoting.Channels;
  5. using System.Runtime.Remoting.Channels.Ipc;
  6. using System.Threading;
  7. using System.Windows;
  8. using System.Windows.Threading;
  9. using Vinno.IDCardReader;
  10. namespace Vinno.IdentificationCardApp
  11. {
  12. /// <summary>
  13. /// Interaction logic for MainWindow.xaml
  14. /// </summary>
  15. public partial class MainWindow
  16. {
  17. private bool _bTimeToStop;
  18. private Thread _workThread;
  19. private readonly ManualResetEvent _workStopEvent;
  20. private readonly IIdCardListener _idListener;
  21. private readonly IDCardManager _idCardManager;
  22. private readonly DispatcherTimer _timer;
  23. private bool _mainIsExisting = true;
  24. private const double MilliSeconds = 500;//ms
  25. public MainWindow()
  26. {
  27. InitializeComponent();
  28. Visibility = Visibility.Hidden;
  29. _idCardManager = new IDCardManager();
  30. _idCardManager.OpenPort();
  31. var ipcChannel = new IpcClientChannel();
  32. ChannelServices.RegisterChannel(ipcChannel, false);
  33. _idListener = (IIdCardListener)Activator.GetObject(typeof(IIdCardListener), "ipc://IdCard/IdCardListener");
  34. _workThread = new Thread(ThreadWorkFunction) { IsBackground = true };
  35. _workStopEvent = new ManualResetEvent(false);
  36. _workThread.Start();
  37. _timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(MilliSeconds) };
  38. _timer.Tick += OnTimerTick;
  39. _timer.Start();
  40. Logger.Info("Identification read tool started");
  41. }
  42. private void OnTimerTick(object sender, EventArgs eventArgs)
  43. {
  44. if (_mainIsExisting == false)
  45. {
  46. Close();
  47. }
  48. }
  49. private void ThreadWorkFunction()
  50. {
  51. while (_workStopEvent.WaitOne(Convert.ToInt32(MilliSeconds)) == false)
  52. {
  53. try
  54. {
  55. //Shut down the process of Read identification tool
  56. _mainIsExisting = Process.GetProcessesByName("vStation").Any();
  57. if (_mainIsExisting == false)
  58. {
  59. break;
  60. }
  61. if (_idCardManager.PortIsOpened)
  62. {
  63. var readCardCode = _idCardManager.ReadIcCard();
  64. if (readCardCode == ReadCardReturnCodeEnum.Ok)
  65. {
  66. SendData();
  67. }
  68. else if (readCardCode == ReadCardReturnCodeEnum.DeviceConnectionError)
  69. {
  70. if (_idCardManager.ClosePort())
  71. {
  72. _idCardManager.OpenPort();
  73. }
  74. }
  75. }
  76. else
  77. {
  78. _idCardManager.OpenPort();
  79. }
  80. }
  81. catch (Exception ex)
  82. {
  83. Logger.Error("ThreadWorkFunction", ex);
  84. }
  85. }
  86. }
  87. private void BtnClick(object sender, RoutedEventArgs e)
  88. {
  89. if (_bTimeToStop)
  90. {
  91. _workThread = new Thread(ThreadWorkFunction) { IsBackground = true };
  92. _workThread.Start();
  93. _bTimeToStop = false;
  94. btnReadCard.Content = "STOP";
  95. }
  96. else
  97. {
  98. _bTimeToStop = true;
  99. btnReadCard.Content = "START";
  100. }
  101. }
  102. public void SendData()
  103. {
  104. try
  105. {
  106. CardInfo cardInfo = new CardInfo();
  107. cardInfo.Id = _idCardManager.IDCardInfo.Idc;
  108. cardInfo.Name = _idCardManager.IDCardInfo.Name;
  109. cardInfo.Birthday = _idCardManager.IDCardInfo.Birthday;
  110. cardInfo.Gender = _idCardManager.IDCardInfo.SexCode == "1" ? IDGenderType.Male : IDGenderType.Female;
  111. cardInfo.Address = _idCardManager.IDCardInfo.Address;
  112. cardInfo.SignAddress = _idCardManager.IDCardInfo.SignAddress;
  113. cardInfo.People = _idCardManager.IDCardInfo.PeopleCode;
  114. cardInfo.SamId = _idCardManager.IDCardInfo.PeriodOfValidityCode;
  115. cardInfo.ValidDateFrom = _idCardManager.IDCardInfo.StartDate;
  116. cardInfo.ValidDateTo = _idCardManager.IDCardInfo.EndDate;
  117. cardInfo.ImageBytes = _idCardManager.IDCardInfo.PicByte;
  118. Logger.Info(string.Format("SendData: Name:{0}, ID:{1}, Birthday:{2}, Gender:{3} Address:{4}",
  119. cardInfo.Name, cardInfo.Id, cardInfo.Birthday, cardInfo.Gender, cardInfo.Address));
  120. _idListener.SetCardInfo(cardInfo);
  121. }
  122. catch (Exception ex)
  123. {
  124. Logger.Error("SendData", ex);
  125. }
  126. }
  127. private void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e)
  128. {
  129. _timer.Stop();
  130. _workStopEvent.Set();
  131. }
  132. }
  133. }