关于X64程序对X86程序依赖的一个案例-第四篇

TwainClientSender:

namespace Common.Util
{
    public class TwainClientSender
    {
        private NamedPipeClientStream _sender;
        public static TwainClientSender _instance;
        private TwainClientSender() { }
        public static TwainClientSender Instance
        {
            get { return _instance ?? (_instance = new TwainClientSender()); }
        }
        public void Start(string senderName)
        {
            _sender = new NamedPipeClientStream(".", senderName, PipeDirection.Out);
            _sender.Connect();
        }

        public void SendMessages(int type, string data)
        {
            if(_sender == null) return; 
            try
            {
                string preData = (int)type + ":";
                using (StreamWriter writer = new StreamWriter(_sender))
                {
                    writer.WriteLine(preData + data);
                    writer.Flush();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Send error: " + ex.Message);
            }
        }

        public void Disconnect()
        {
            _sender.Close();
        }
    }
}

  TwainClientReceiver:

namespace Common.Util
{
    public class TwainClientReceiver
    {
        private NamedPipeClientStream _receiver;
        public static TwainClientReceiver _instance;
        private Thread _receiveThread;
        Form _form;

        private YunTwainBootstrap scannerBootStrap;
        private TwainClientReceiver() { }

        public bool isClosed = true;
        public static TwainClientReceiver Instance
        {
            get { return _instance ?? (_instance = new TwainClientReceiver()); }
        }
        public void Start(string senderName, Form form)
        {
            _form = form;
            _receiver = new NamedPipeClientStream(".", senderName, PipeDirection.In); 
            _receiver.Connect();
            _receiveThread = new Thread(ReceiveMessages);
            _receiveThread.Start();

             scannerBootStrap = YunTwainBootstrap.GetInstance(_form);
              isClosed = false;
        }

        private void ReceiveMessages()
        {
            try
            {
                using (StreamReader reader = new StreamReader(_receiver))
                {
                    while (true)
                    {
                        string message = reader.ReadLine();
                        if (string.IsNullOrEmpty(message))
                            continue;
                        if (_form.InvokeRequired)
                        {
                            _form.Invoke(new Action<string>(HandleMessage), message);
                        }
                        else
                        {
                            HandleMessage(message);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Receive error: " + ex.Message);
            }
        }

        private void HandleMessage(object state)
        {
            string message = (string)state;
            // Parse the message and call the appropriate function
            if (message.StartsWith("TypeA:"))
            {
                // TypeAFunction(message.Substring(5));
            }
            else if (message.StartsWith("TypeB:"))
            {
                //TypeBFunction(message.Substring(5));
            }
            else if (message.StartsWith("EXIT"))
            {
                isClosed = true;
                Console.WriteLine("Unknown message type: " + message);
            }
        }

        public void Disconnect()
        {
            _receiver.Close();
        }

        public bool IsClosed()
        {
            return isClosed;
        }
    }
}

  

posted @ 2025-07-08 19:19  Wind_Swing_Dunn  阅读(6)  评论(0)    收藏  举报