none
Intercettare stato di una stampante RRS feed

  • Domanda

  • Salve a tutti.
    Ho un pò di conoscenza in VBnet, più che altro da autodidatta, e nessuna in C o linguaggi simili.
    Gestisco una piccola applicazione convertita in VBnet che produce delle stampe.
    A volte mi chiamano perchè non esce la carta, e spesso il problema è legato al fatto che la stampa è in coda nella printer, ma a causa di qualche problema tra computer e stampante, la stampa rimane in coda.
    Mi è stato chiesto se riesco a far verificare dall'applicazione se, dopo aver lanciato la stampa, lo spool di stampa viene svuotato.
    Ho guardato sull'Help di VBnet e visto che dovrei interrogare la classe Printque per verificare lo stato con la proprietà isinerror.
    Il problema è che se copio quanto indicato nell'esempio in un progetto VB2008
    Dim instance As PrintQueue
    Dim value As Boolean

    value = instance.IsInError

    Mi si evidenzia instance.isinerror segnalando che si potrebbe avere un'eccezione perchè non è ancora stato assegnato un valore.
    Quindi evidentemente manca qualcosa.
    Sicuramente dovrò in qualche modo dirgli quale è la stampante che voglio interrogare, ma non sono riuscito a capire come dire alla printque quale stampante interrogare.
    Sono su una strada corretta, o ho preso una tangente che mi sta portando fuori strada?

    Grazie per i suggerimenti

    domenica 4 ottobre 2009 14:33

Risposte

  • Prova con:
    Dim ps as New LocalPrintServer()
    Dim pq as PrintQueue=ps.DefaultPrintQueue
    dim err as Boolean=pq.IsInError

    HTH
    Corrado Cavalli [Microsoft .NET MVP-MCP]
    UGIdotNET - http://www.ugidotnet.org
    Weblog: http://blogs.ugidotnet.org/corrado/
    Twitter: http://twitter.com/corcav
    domenica 4 ottobre 2009 17:34
  • In più, ti spiego un particolare relativamente all'esempio che hai trovato. Non è propriamente un esempio, ma la sintassi di uso.

    Dim instance As PrintQueue
    Dim value As Boolean

    value = instance.IsInError

    la prima riga significa: "sia dato un oggetto di tipo PrintQueue"
    la seconda riga significa: "e una variabile di tipo Boolean"
    la terza riga significa: "la proprietà IsInError si usa in questo modo"

    Gli errori (o piuttosto gli avvisi) significano che alla variabile value non è ancora stato dato un valore (True o False) e che la variabile instance potrebbe essere Nothing (perché non è stata effettivamente istanziata una PrintQueue con New)

    Da quanto sopra si sarebbe dovuto capire (ma è invece una cosa che si apprende con la pratica) che in realtà un codice 'funzionante' è simile a questo:

    ' creo un oggetto PrintQueue
    Dim instance As New PrintQueue

    ' inizio a farci qualcosa

    ' in qualche punto verifico il valore della proprietà IsInError
    Dim value As Boolean = instance.IsInError




    ---------------- Diego Cattaruzza Microsoft MVP - Visual Basic: Development blog: http://community.visual-basic.it/Diego web site: http://www.visual-basic.it
    mercoledì 7 ottobre 2009 09:11

Tutte le risposte

  • Prova con:
    Dim ps as New LocalPrintServer()
    Dim pq as PrintQueue=ps.DefaultPrintQueue
    dim err as Boolean=pq.IsInError

    HTH
    Corrado Cavalli [Microsoft .NET MVP-MCP]
    UGIdotNET - http://www.ugidotnet.org
    Weblog: http://blogs.ugidotnet.org/corrado/
    Twitter: http://twitter.com/corcav
    domenica 4 ottobre 2009 17:34
  • WoW

    1000 grazie

    Ora spero di riuscire ad andare avanti da solo
    lunedì 5 ottobre 2009 19:45
  • In più, ti spiego un particolare relativamente all'esempio che hai trovato. Non è propriamente un esempio, ma la sintassi di uso.

    Dim instance As PrintQueue
    Dim value As Boolean

    value = instance.IsInError

    la prima riga significa: "sia dato un oggetto di tipo PrintQueue"
    la seconda riga significa: "e una variabile di tipo Boolean"
    la terza riga significa: "la proprietà IsInError si usa in questo modo"

    Gli errori (o piuttosto gli avvisi) significano che alla variabile value non è ancora stato dato un valore (True o False) e che la variabile instance potrebbe essere Nothing (perché non è stata effettivamente istanziata una PrintQueue con New)

    Da quanto sopra si sarebbe dovuto capire (ma è invece una cosa che si apprende con la pratica) che in realtà un codice 'funzionante' è simile a questo:

    ' creo un oggetto PrintQueue
    Dim instance As New PrintQueue

    ' inizio a farci qualcosa

    ' in qualche punto verifico il valore della proprietà IsInError
    Dim value As Boolean = instance.IsInError




    ---------------- Diego Cattaruzza Microsoft MVP - Visual Basic: Development blog: http://community.visual-basic.it/Diego web site: http://www.visual-basic.it
    mercoledì 7 ottobre 2009 09:11