Ottenere Il Controllo WebBrowser Di Lavoro In Applicazione Console?

Ho una stampante di classe che è in grado di stampare HTML tramite l’oggetto WebBrowser. Voglio essere in grado di stampare da un’applicazione console, ma mi da un errore quando la mia classe di stampanti cerca di creare un oggetto WebBrowser:

WebBrowser browser = new WebBrowser();

Errore:

ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot 
be instantiated because the current thread is not in a 
single-threaded apartment.  

Ho cercato di aggiungere un riferimento a System.Windows.Forme nella mia applicazione console ma che non ha funzionato. Non ho la minima idea di quello che sta succedendo qui, ma gradirei l’aiuto.

InformationsquelleAutor sooprise | 2011-04-01

 

2 Replies
  1. 20

    Aggiungere STAThread attributo principale del metodo.

    [STAThread]
    public static Main()
    {
        ...
    }

    Aggiornamento: Qui quello che si deve fare con il thread in cui il Browser viene creato

    thread.SetApartmentState(ApartmentState.STA);

    Aggiorna 2:

    Se un thread per ogni app:

    Thread.CurrentThread.SetApartmentState(ApartmentState.STA);
    • Il mio programma viene eseguito con [STAThread], ma in realtà non stampa.
    • Ma si sta creando un altro thread in app, giusto?
    • Ho una nuovissima console applicazione che chiama la stampa metodo di stampa di classe nel metodo Main. Io non credo di creare altri thread nella mia applicazione console. Per favore fatemi sapere se questo non risponde alla tua domanda, grazie.
    • provate la mia versione aggiornata, in caso di necessità.
    • Non riesco a capire come impostare “therad” per il thread corrente? Il mio Browser si apre proprio dal principale classe di stampanti. Apprezzo molto l’aiuto finora 🙂
    • Thread.CurrentThread.SetApartmentState(ApartmentState.STA);

  2. 9

    Una console modalità di applicazione e WebBrowser sono l’acqua e il fuoco. È necessario seguire le apartment a thread singolo contratto per un thread di utilizzo di WebBrowser:

    • deve essere un STA, usare [STAThread] in Main() o Thread.SetApartmentState() se si crea un thread.
    • deve pompare un ciclo di messaggi, l’Applicazione.Run() disponibile in Winforms o WPF.

    Il secondo requisito è difficile per WebBrowser, non suo fuoco di eventi, se non lo usi. Controllare questa risposta per il codice per creare un filo che va WB. Una applicazione GUI basato su windows form o WPF avrà sempre il suo principale thread è già adatto per l’uso con WB.

    • Grazie per la Thread.SetApartmentState() suggerimento, SSIS che non posso usare [STAThread] e ho speso un sacco di tempo alla ricerca di un’alternativa!

Lascia un commento