2016-04-17 6 views
-1

Ich habe ein Problem in meiner Anwendung. Ich habe 2 Winform und Call-Funktion von Formular 1 zu einer Funktion in Form 2 zum Drucken eines Webbrowsers, aber dost arbeiten. hier mein Code:vb.net verwenden System.Threading.Thread für Anruf drucken Web-Browser dost arbeiten

Form 1:

Dim th As System.Threading.Thread = New Threading.Thread(AddressOf Task_A) 
th.SetApartmentState(ApartmentState.STA) 
th.Start() 

Public Sub Task_A 
    Call form2.fishsefaresh() 
End Sub 

form2:

Public Sub fishsefaresh() 
Dim fac As String = " HTML CODE " 
Dim FILE_NAME As String = "my_app.html" 
Dim objWriter As New System.IO.StreamWriter(FILE_NAME) 
objWriter.Write(fac) 
objWriter.Close() 

Dim we As WebBrowser = Form2.WebBrowser1 
we.Navigate("file:///" & IO.Path.GetFullPath(".\my_app.html") 

While we.ReadyState <> WebBrowserReadyState.Complete 
Application.DoEvents() 
End While 

we.Print() 

wenn ich laufe app nichts geschieht (i Drucker divise und inestall in meinem Computer gesetzt), i, was Web-Browser haben Problem bei Verwendung von System.Threading.

Steuer

Antwort

0

Mit Application.DoEvents() ist keine gute Idee, und ich kann nicht verstehen, warum Sie selbst es tun würde, wenn Sie bereits in einem Hintergrundthread sind?

Was ich vorschlagen Sie tun, ist die Schleife mit dem Aufruf DoEvents() zu entfernen, und abonnieren Sie stattdessen das WebBrowser DocumentCompleted Ereignis. Sie können es später wieder abbestellen, wodurch es nur einmal ausgelöst wird.

ersetzen dies alles:

Dim we As WebBrowser = Form2.WebBrowser1 
we.Navigate("file:///" & IO.Path.GetFullPath(".\my_app.html") 

While we.ReadyState <> WebBrowserReadyState.Complete 
Application.DoEvents() 
End While 

we.Print() 

mit diesem:

Dim we As WebBrowser = Form2.WebBrowser1 

AddHandler we.DocumentCompleted, AddressOf WebBrowser_DocumentCompleted 

we.Navigate("file:///" & IO.Path.GetFullPath(".\my_app.html") 

dann das Ereignisabonnement Methode deklarieren:

Private Sub WebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) 
    Dim wb As WebBrowser = DirectCast(sender, WebBrowser) 'Cast the control that raised the event to a WebBrowser. 

    wb.Print() 'Print the page. 
    RemoveHandler wb.DocumentCompleted, AddressOf WebBrowser_DocumentCompleted 'Remove the event subscription. 
End Sub 

hoffe, das hilft!

Verwandte Themen