public void StartProcess(eAssignedLane_Printer Lane, string filename)
        {
            if (PrinterManager.getInstance() == null)
            {
                return;
            }
            else
            {
                Log4.PrinterLogger.InfoFormat("[SOA]StartProcess({0},{1})", Lane.ToString(), filename);
                //如果檔案是用XML則需要enqueue
                if (PrinterManager.getInstance().ExchangeMethod == SFCData.eSFCDataExchangeMethod.XML)
                {
                    InspectedPanel panel = null;
                    while (panel == null)
                    {
                        panel = null;
                        try
                        {
                            panel = IPCHelper.DeserializeFromXML <InspectedPanel>(filename);
                        }
                        catch (Exception ex)
                        {
                            //Log4.SFCLogger.InfoFormat("Pause {0} ms", iPause);
                            //Thread.Sleep(iPause);
                            //Log4.SFCLogger.ErrorFormat("DeserializeFromXML File {0} Exception:{1}", AssemblyPath + "\\DataExchange\\" + e.Name, ex.Message);
                        }
                    }
                    switch (Lane)
                    {
                    case eAssignedLane_Printer.None:
                        break;

                    case eAssignedLane_Printer.Lane1:
                        ViewModelLocator.Atom.FlowHostVM.spiInspectedData.Add("[" + eAssignedLane_Printer.Lane1.ToString() + "]" + panel.InspectStartTime);
                        Log4.PrinterLogger.InfoFormat(" -Push [{0}] CurrentInspectModeTemp.InspectMode={1} .InspectResult={2}", Lane.ToString(), panel.InspectMode, panel.InspectResult);
                        PrinterManager.getInstance().CurrentInspectModeTemp[0].InspectMode   = panel.InspectMode;
                        PrinterManager.getInstance().CurrentInspectModeTemp[0].InspectResult = panel.InspectResult;
                        Log4.PrinterLogger.InfoFormat(" -Enqueue [{0}] SPI Data InspectTime = {1}", Lane.ToString(), panel.InspectStartTime);
                        PrinterManager.getInstance().RemotePrinter[0].Printer.InspectedPanels.Enqueue(panel);

                        break;

                    case eAssignedLane_Printer.Lane2:
                        ViewModelLocator.Atom.FlowHostVM.spiInspectedData.Add("[" + eAssignedLane_Printer.Lane2.ToString() + "]" + panel.InspectStartTime);
                        Log4.PrinterLogger.InfoFormat(" -Push [{0}] CurrentInspectModeTemp.InspectMode={1} .InspectResult={2}", Lane.ToString(), panel.InspectMode, panel.InspectResult);
                        PrinterManager.getInstance().CurrentInspectModeTemp[1].InspectMode   = panel.InspectMode;
                        PrinterManager.getInstance().CurrentInspectModeTemp[1].InspectResult = panel.InspectResult;
                        Log4.PrinterLogger.InfoFormat(" -Enqueue [{0}] SPI Data InspectTime = {1}", Lane.ToString(), panel.InspectStartTime);
                        PrinterManager.getInstance().RemotePrinter[1].Printer.InspectedPanels.Enqueue(panel);

                        break;
                    }
                }
                switch (Lane)
                {
                case eAssignedLane_Printer.None:
                    break;

                case eAssignedLane_Printer.Lane1:
                    PrinterManager.getInstance().RemotePrinter[0].Printer.StartProcess();
                    break;

                case eAssignedLane_Printer.Lane2:
                    PrinterManager.getInstance().RemotePrinter[1].Printer.StartProcess();
                    break;
                }
            }
        }