Пример #1
0
        public static void GetDeviceStatus(string portName, string portSettings, int timeout, Action <Result, IPrinterStatus> action)
        {
            Task task = new Task(() =>
            {
                Result result = Result.UnknownError;

                IPort port = null;

                IPrinterStatus printerStatus = null;

                try
                {
                    result = Result.GetPortError;

                    port = Port.GetPort(portName, portSettings, timeout);

                    result = Result.GetParsedStatusError;

                    printerStatus = port.GetParsedStatus();

                    result = Result.Success;
                }
                catch (Exception exception)
                {
                    DebugExt.WriteLine(exception.Message);
                }
                finally
                {
                    if (port != null)
                    {
                        Port.ReleasePort(port);

                        port = null;
                    }
                }

                Device.BeginInvokeOnMainThread(() => {
                    action(result, printerStatus);
                });
            });

            task.Start();
        }
Пример #2
0
        public static void SearchPrinter(string target, Action <IList <PortInfo> > action)
        {
            Task task = new Task(() =>
            {
                IList <PortInfo> portInfoList = new List <PortInfo>();

                try
                {
                    portInfoList = Port.SearchPrinter(target);
                }
                catch (Exception exception)
                {
                    DebugExt.WriteLine(exception.Message);
                }

                Device.BeginInvokeOnMainThread(() => {
                    action(portInfoList);
                });
            });

            task.Start();
        }
Пример #3
0
        public static void SendCommands(byte[] commands, string portName, string portSettings, int timeout, Action <Result> action)
        {
            Task task = new Task(() =>
            {
                Result result = Result.UnknownError;

                IPort port = null;

                IPrinterStatus printerStatus;

                try
                {
                    result = Result.GetPortError;

                    port = Port.GetPort(portName, portSettings, timeout);

                    result = Result.BeginCheckedBlockError;

                    printerStatus = port.BeginCheckedBlock();

                    if (printerStatus.Offline)
                    {
                        throw new Exception("Printer is offline (BeginCheckedBlock)");
                    }

                    result = Result.WritePortError;

                    DateTime startDateTime = DateTime.Now;

                    int total = 0;

                    while (true)
                    {
                        int written = port.WritePort(commands, total, commands.Length - total);

                        total += written;

//                      if (total == commands.Length)
                        if (total >= commands.Length)
                        {
                            break;
                        }

                        TimeSpan timeSpan = DateTime.Now - startDateTime;

                        if (timeSpan.TotalMilliseconds >= 30000)     // 30000mS!!!
                        {
                            throw new Exception("Write port timed out");
                        }
                    }

                    result = Result.EndCheckedBlockError;

                    port.EndCheckedBlockTimeoutMillis = 30000;     // 30000mS!!!

                    printerStatus = port.EndCheckedBlock();

                    if (printerStatus.Offline)
                    {
                        throw new Exception("Printer is offline (EndCheckedBlock)");
                    }

                    result = Result.Success;
                }
                catch (Exception exception)
                {
                    DebugExt.WriteLine(exception.Message);
                }
                finally
                {
                    if (port != null)
                    {
                        Port.ReleasePort(port);

                        port = null;
                    }
                }

                Device.BeginInvokeOnMainThread(() => {
                    action(result);
                });
            });

            task.Start();
        }