123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- using System;
- using System.Diagnostics;
- using System.Linq;
- using System.Runtime.Remoting.Channels;
- using System.Runtime.Remoting.Channels.Ipc;
- using System.Threading;
- using System.Windows;
- using System.Windows.Threading;
- using Vinno.IDCardReader;
- namespace Vinno.IdentificationCardApp
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow
- {
- private bool _bTimeToStop;
- private Thread _workThread;
- private readonly ManualResetEvent _workStopEvent;
- private readonly IIdCardListener _idListener;
- private readonly IDCardManager _idCardManager;
- private readonly DispatcherTimer _timer;
- private bool _mainIsExisting = true;
- private const double MilliSeconds = 500;//ms
-
- public MainWindow()
- {
- InitializeComponent();
- Visibility = Visibility.Hidden;
- _idCardManager = new IDCardManager();
- _idCardManager.OpenPort();
- var ipcChannel = new IpcClientChannel();
- ChannelServices.RegisterChannel(ipcChannel, false);
- _idListener = (IIdCardListener)Activator.GetObject(typeof(IIdCardListener), "ipc://IdCard/IdCardListener");
-
- _workThread = new Thread(ThreadWorkFunction) { IsBackground = true };
- _workStopEvent = new ManualResetEvent(false);
- _workThread.Start();
- _timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(MilliSeconds) };
- _timer.Tick += OnTimerTick;
- _timer.Start();
- Logger.Info("Identification read tool started");
- }
- private void OnTimerTick(object sender, EventArgs eventArgs)
- {
- if (_mainIsExisting == false)
- {
- Close();
- }
- }
- private void ThreadWorkFunction()
- {
- while (_workStopEvent.WaitOne(Convert.ToInt32(MilliSeconds)) == false)
- {
- try
- {
- //Shut down the process of Read identification tool
- _mainIsExisting = Process.GetProcessesByName("vStation").Any();
- if (_mainIsExisting == false)
- {
- break;
- }
- if (_idCardManager.PortIsOpened)
- {
- var readCardCode = _idCardManager.ReadIcCard();
- if (readCardCode == ReadCardReturnCodeEnum.Ok)
- {
- SendData();
- }
- else if (readCardCode == ReadCardReturnCodeEnum.DeviceConnectionError)
- {
- if (_idCardManager.ClosePort())
- {
- _idCardManager.OpenPort();
- }
- }
- }
- else
- {
- _idCardManager.OpenPort();
- }
- }
- catch (Exception ex)
- {
- Logger.Error("ThreadWorkFunction", ex);
- }
- }
- }
- private void BtnClick(object sender, RoutedEventArgs e)
- {
- if (_bTimeToStop)
- {
- _workThread = new Thread(ThreadWorkFunction) { IsBackground = true };
- _workThread.Start();
- _bTimeToStop = false;
- btnReadCard.Content = "STOP";
- }
- else
- {
- _bTimeToStop = true;
- btnReadCard.Content = "START";
- }
- }
- public void SendData()
- {
- try
- {
- CardInfo cardInfo = new CardInfo();
- cardInfo.Id = _idCardManager.IDCardInfo.Idc;
- cardInfo.Name = _idCardManager.IDCardInfo.Name;
- cardInfo.Birthday = _idCardManager.IDCardInfo.Birthday;
- cardInfo.Gender = _idCardManager.IDCardInfo.SexCode == "1" ? IDGenderType.Male : IDGenderType.Female;
- cardInfo.Address = _idCardManager.IDCardInfo.Address;
- cardInfo.SignAddress = _idCardManager.IDCardInfo.SignAddress;
- cardInfo.People = _idCardManager.IDCardInfo.PeopleCode;
- cardInfo.SamId = _idCardManager.IDCardInfo.PeriodOfValidityCode;
- cardInfo.ValidDateFrom = _idCardManager.IDCardInfo.StartDate;
- cardInfo.ValidDateTo = _idCardManager.IDCardInfo.EndDate;
- cardInfo.ImageBytes = _idCardManager.IDCardInfo.PicByte;
- Logger.Info(string.Format("SendData: Name:{0}, ID:{1}, Birthday:{2}, Gender:{3} Address:{4}",
- cardInfo.Name, cardInfo.Id, cardInfo.Birthday, cardInfo.Gender, cardInfo.Address));
- _idListener.SetCardInfo(cardInfo);
- }
- catch (Exception ex)
- {
- Logger.Error("SendData", ex);
- }
- }
- private void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e)
- {
- _timer.Stop();
- _workStopEvent.Set();
- }
- }
- }
|