关于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;
}
}
}

浙公网安备 33010602011771号