Hallo,
allerdings wird in 2 anderen Backgroundworkern jeweils Seiten angesteuert, Quelltext ausgelesen und analysiert.
Benutzen die auch das WebBrowser-Control?Kanns an sowas banalem liegen wie einfach nur den Zugriff auf Elemente innerhalb des Controls?
Ja - weil das Control eben dem GUI-Thread gehört.Gruß, MarsStein
Ich werde nachher nach der Arbeit mal testen, wie ich die Eingabe und das Abschicken im BGW_ProgressChanged verarbeiten kann. Den Link habsch mir zu Gemüte geführt, nur gibt sich gerade keine Möglichkeit zum Testen.
Doch falls der Vorgang nun zu lange benötigt, ist ein extra Thread dafür ja auch unnötig, wenn die wichtigen Bearbeitungen/Berechnungen wieder im GUI-Thread laufen, oder seh ich das falsch?
Gruß Gino
Daran dachte ich auch schon, allerdings wird in 2 anderen Backgroundworkern jeweils Seiten angesteuert, Quelltext ausgelesen und analysiert. Der einzige Unterschied ist jetzt, dass ich nicht den Code analysiere sondern auf Elemente zugreife.
Dargestellt wird bei den anderen BGWs ebenfalls alles, der Zugriff und Zuweisung besteht also hier schon und verursacht keine Probleme.
Kanns an sowas banalem liegen wie einfach nur den Zugriff auf Elemente innerhalb des Controls?
Durch einige Tests, die ich grade durchgeführt habe, ist es vollkommen egal, welche Seite.
Mein Ziel ist jedenfalls www.yopi.de
Hier der Code mit dem ich auf die Homepage zugreife und versuche Zugriff zu erhalten:
IsPageComplete = false;
webBrowser.Navigate(string.Format(reviewPage, "404999"));
// webBrowser.DocumentText = helper.GetHtml(string.Format(reviewPage, "404999")); Voriger Versuch
//Waiting until the browser has loaded the page completelly
while (!IsPageComplete)
{ }
webBrowser.Document.All["rating_comment"].InnerText = "hallo";
Das Ganze läuft in einem Backgroundworker ab, da nach einem erfolgreichen Test eine Schleife um den Code hier gelegt wird.
Dies ist bisher der vollständige Code des BGWs, mehr macht er nicht.
Die letzte Zeile löst dabei den Fehler aus. IsPageComplete wird in dem Event "Document_Completed" auf true gesetzt.
Hier noch die passende Konstante:
const string reviewPage = "http://www.yopi.de/rev/";
Habs grad mal mit webbrowser.Navigate(url) versucht, doch auch hier folgt der selbe Fehler, nachdem die Seite fertig geladen hat und versucht wird auf das HtmlElement zuzugreifen.
EDIT: Aktiv weitersurfen ist nicht notwendig, das übernimmt das Programm
Hi Leute,
ich sitze nun schon geschlagene 10 Stunden, auf 3 Tage verteilt, an dem Problem und finde einfach keine Lösung.
Die allgegenwärtige Googlesuche habe ich schon bemüht doch damit komm ich kein Stück weiter, vorallem wird dort auf VB verwiesen. Auch hier im Forum habe ich schon gesucht, doch wurd auch hier nicht fündig.
Folgender Hintergrund:
Ich versuche mit dem Webbrowsercontrol eine Webseite zu laden und die darin vorhandenen Textareas/Textboxen/Radiobuttons mit Inhalt zu füllen.
Bei dem Versuch mittels:
webBrowser.Document.All["name_der_textbox"].InnerText = "Irgendein Inhalt";
einen String in das Feld zu bekommen, gibt es folgenden Fehler:
System.InvalidCastException wurde nicht von Benutzercode behandelt.
Message=Die angegebene Umwandlung ist ungültig.
Source=System.Windows.Forms
StackTrace:
bei
System.Windows.Forms.UnsafeNativeMethods.IHTMLDocument2.GetLocation()
bei System.Windows.Forms.WebBrowser.get_Document()
bei Yopi4Win_GUI.Form1.bgWorker_CommentReview_DoWork(Object
sender, DoWorkEventArgs e) in C:\Users\Shinobi\Documents\Visual
Studio 2010\Projects*******\Form1.cs:Zeile 495.
bei System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
bei
System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object
argument)
InnerException:
Das Browsercontrol fülle ich vorher mit einer Helferklasse:
webBrowser.DocumentText = helper.GetHtml(string.Format(reviewPage, "404999"));
public string GetHtml(string Url)
{
request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.CookieContainer = cookieContainer;
request.Method = "GET";
request.UserAgent = UserAgent;
response = (HttpWebResponse)request.GetResponse();
reader = new StreamReader(response.GetResponseStream());
string html = reader.ReadToEnd();
reader.Close();
response.Close();
return html;
}
Die Klasse funktioniert einwandfrei, daran liegt es nicht. Die Seite wird angezeigt, nur beim Zugriff danach kommt der Fehler.
Weder Google, noch msdn brachten mich bisher weiter, daher hoffe ich nun auf eure Hilfe.
Grüße
mhh okay, das vereinfacht einiges. Gibts dazu schon etwas oder muss ich mich auf der Homepage von lame umsehen?
Gibt es da vielleicht trotzdem eine Möglichkeit in .net?
Haben hier auch mehrere mp3-Dateien die alle nur in wav abgespielt werden können. Um nicht allen Mitarbeitern einzeln LAME zu zeigen und zu erklären, will ich n kleines Tool schreiben wo die Dateien reingezogen werden können und anschließend konvertiert werden.
Greetz
Hallöchen,
ich weiß das ganze ist jetzt schon fast 9 Monate her, aber wie siehts mit dem Programm aus?
Klasse Arbeit muss ich sagen, hab eben erstmal blöd aus der Wäsche geschaut nachdem ihc mir das so durchgelesen hab 😉
Schade wollte grade fragen ob du jemanden für die Story brauchst. Würd mich auch weiterhin noch dafür melden, wenn du bis Anfang 2010 Zeit hast^^ Wäre auch gern als Tester dabei, da mich der ehemalige Name und auch der Name des Drachens stark an Dragon Quest erinnert und ich alle Teile durchgespielt habe 😉
sry herbivore, werd zukünftig besser drauf achten 8o
@kleines_eichhoernchen: thx, genau das wars, was ich nun doch brauchte =) klappt soweit
Hallo Leute,
ich hab mir jetzt schon einige Sachen zum Thema Multithreading und Backgroundworker durchgelesen, gegooglet und getestet...
irgendwie schaff ichs jedoch nie, die besagten Beispiele auf mein Programm umzuschreiben.
Hier der QT vom Backgroundworker:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker BotWorker = sender as BackgroundWorker;
e.Result = BotGamer(BotWorker);
if (BotWorker.CancellationPending)
{
e.Cancel = true;
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show("Fehler");
}
else
{
MessageBox.Show("kein Fehler");
}
}
Ich hab das doch richtig verstanden, dass man innerhalb DoWork-Methode eine Methode aufruft und das Ergebnis davon mittels e.Result abfängt oder? In der RunWorkerCompleted-Methode prüfe ich lediglich ob es zu einem Fehler kommt oder nicht (zum Testen ob das ganze auch funktioniert).
Hier der QT der aufgerufenen Methode:
public int BotGamer(BackgroundWorker BotWorker)
{
while (!this.backgroundWorker1.CancellationPending)
{
if (SpielAuslesen(0) == "1")
{
if (ConfAuslesen(6) == "False" && SpielAuslesen(0) == "1")
{
//Computer ist an der Reihe
Random rnd = new Random();
Thread.Sleep(rnd.Next(400, 1200));
if (BotConfAuslesen(0) == "True")
{
spielzug((rnd.Next(1, 3)));
}
else
{
spielzug((3 + 1 - Convert.ToInt32(SpielAuslesen(2))));
}
}
}
else
{
Thread.Sleep(500);
}
}
return 0;
}
Geplant war eigentlich, dass der Backgroundworker startet wenn ein bestimmter Wert in der Configdatei auf False ist. Der bgw soll die Methode aufrufen, welche dann in einer Schleife prüft ob der Wert immernoch gleich ist. Nach den Prüfungen und Berechnungen soll das Ergebnis zurückgegeben werden und eine andere Methode aufrufen. Der bgw soll jedoch erst beendet werden wenn ich einen Button drücke, solange sollen die Prüfungen und Berechnungen weiterhin durchgeführt werden.
Weiß einer zufällig auf den ersten Blick wo der Fehler liegen könnte?
Thx schonmal
Sehr gutes Tutorial, vielleicht n bissl schwer für Einsteiger die sich noch nicht sehr tief in die GUI Programmierung eingearbeitet haben, aber sonst sehr gut. Hab wohl auch noch ein paar Probleme das durchzuarbeiten, doch scheint sich zu lohnen 😉
nein muss selbst gezeichnet werden...das ist ja grad das schwere daran...es als Bild einfügen wäre ja nicht das Ding gewesen, bin ich auch drauf gekommen, allerdings besteht grade darin die Schwierigkeit >.<
Hallo Leute,
ich hab mal ne Frage:
Und zwar frage ich mich, wie man in einem Fenster ein Doppelhelix zeichnet.
Hat da vllt jemand ne Idee bzw. ne Codeausschnitt oder schon was fertig zur Hand?
Falls sich jemand fragt wie eine Doppelhelix aussieht, >> hier << gucken
Greetz