Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    174

    [VB.NET]Stampa con shell execute non ordinata

    Ciao ragazzi, sto scrivendo un programma che data una lista di file pdf li stampa. Per stamparli questi file li leggo da una lista ordinata alfabeticamente.

    Poi per eseguire l'operazione di stampa uso questo codice:

    codice:
    For Each File In filesInDir
         If Mid(File, InStrRev(File, ".")) = ".pdf" Then
    
                                Dim PrcProcesso As New Process()
                                PrcProcesso.StartInfo.FileName = File
                                PrcProcesso.StartInfo.Verb = "PrintTo"
                                PrcProcesso.StartInfo.Arguments = Chr(34) + printer + Chr(34)
                                PrcProcesso.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
                                PrcProcesso.StartInfo.UseShellExecute = True
                                PrcProcesso.StartInfo.CreateNoWindow = True
                                PrcProcesso.Start()
                                PrcProcesso.
                                
                                PrcProcesso.Close()
                            End If
    next
    Il tutto funziona, ma come detto può darsi che stampa prima il file che inizia con la lettera b che quello con la lettera a.

    Mi sembra di aver capito che lo fa perchè riesce a mandare in stampa più velocemente un file che risulta essere piu piccolo di un altro, quindi se per esempio b é piu piccolo di a, nonostante venga aperto dopo va in stampa prima.
    Sapete come fa, come faccio ad aspettare che il processo faccia tutto?


    Se metto:
    System.Threading.Thread.Sleep(2000)
    prima di prcClose la cosa migliora, ma nn so quanto puo essere affidabile questa cosa!

    Grazie

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Mi sembra di aver capito che lo fa perchè riesce a mandare in stampa più velocemente un file che risulta essere piu piccolo di un altro
    No, lo fa perchè nell'ordine 'reale su disco' il file il b* è stato creato prima di a*.

    Hai verificato che la tua lista filesInDir sia 'veramente' ordinata alfabeticamente?
    Mostra il codice completo.


  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    174
    Si controllo in fase di debug, e la lista contiene i nomi dei file ordinati alfabeticamente.
    Infatti se eseguo il programma mettendo i breakpoint in debug tutto funziona correttamente perche apra praticamente un file dopo l'altro con un certo lasso di tempo tra le due operazioni. In realtime però questo non accade!

  4. #4

  5. #5
    Non credo che il DoEvents c'entri niente, piuttosto inserisci al posto di della Sleep (prima di PrcProcesso.Close()):
    codice:
    PrcProcesso.WaitForExit()
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    174
    Si questo potrebbe andare! Grazie!!

  7. #7
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.