Связь с Zebra GK420d через драйвер Zebra OPOS - PullRequest
2 голосов
/ 02 октября 2009

Я использую принтер этикеток Zebra GK420d для приложения POS, которое я разрабатываю. Я пытаюсь связаться с принтером через драйверы OPOS, предоставляемые Zebra. Но я попал в беду. Это простая форма в Visual Basic 2008 с кнопкой на нем. Вот полный код, который я запускаю.

Открытый класс FrameStep1 Наследует System.Windows.Forms.Form

Private m_Printer As Microsoft.PointOfService.PosPrinter = Nothing

Private Sub ChangeButtonStatus()

    'Disable control.
    btnPrint.Enabled = False
End Sub

Private Sub FrameStep1_Load(ByVal sender As System.Object _
, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim strLogicalName As String
    Dim deviceInfo As DeviceInfo
    Dim posExplorer As PosExplorer

    strLogicalName = "zebra"
    posExplorer = New PosExplorer

    m_Printer = Nothing

    Try
        deviceInfo = posExplorer.GetDevice(DeviceType.PosPrinter, strLogicalName)
        m_Printer = posExplorer.CreateInstance(deviceInfo)

    Catch ex As Exception
        ChangeButtonStatus()
        Return
    End Try

    Try

        m_Printer.Open()
        m_Printer.Claim(1000)
        m_Printer.DeviceEnabled = True

    Catch ex As PosControlException

        ChangeButtonStatus()

    End Try
End Sub


 Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click

    Try

        m_Printer.PrintNormal(PrinterStation.Receipt, "Hello OPOS for .Net" + vbCrLf)

    Catch ex As PosControlException

    End Try
End Sub

Private Sub FrameStep1_Closing(ByVal sender As Object _
, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

    If m_Printer Is Nothing Then
        Return
    End If

    Try
        m_Printer.DeviceEnabled = False
        m_Printer.Release()
    Catch ex As Exception

    Finally
        m_Printer.Close()

    End Try
End Sub

Конечный класс

Вы видите, что я вызвал Claim () и установил DeviceEnabled = true. Тем не менее, когда я отлаживаю его, происходит, когда управление переходит через m_Printer.Open (), он волшебным образом заканчивается btnPrint_Click () и не идет дальше, если я не нажму кнопку в моей форме, а затем в m_Printer.PrintNormal () ломает и выбрасывает POSControlException, а текст в нем гласит: «Была сделана попытка получить доступ к устройству исключительного использования, которое должно быть запрошено, прежде чем можно будет использовать действие метода или набора свойств».

Кажется, я здесь что-то не так делаю.

1 Ответ

1 голос
/ 21 марта 2011

Вы можете попробовать это:

if (m_Printer.State == ControlState.Closed)
  { m_Printer.Open();     }           

if (!m_Printer.Claimed)
                   { m_Printer.Claim(0);}

if (!m_Printer.DeviceEnabled)
                   { m_Printer.DeviceEnabled = true;}

Printer.PrintNormal(PrinterStation.Receipt, text);

Printer.CutPaper(100);

Также помните, что некоторые принтеры ZEBRA ждут нож для бумаги перед началом печати. ​​

...