Problem mit Thread

29/08/2007 - 09:26 von Brian Schmalisch | Report spam
Hallo,

ich wollte mir eine Komponente bauen, in der nach einem entsprechenden
Intervall Webseiten aufgerufen werden. Diese sollen aus einem Array heraus
zugewiesen werden.

Für die Pausen habe ich einen Thread getsartet, welcher dann eine Zeit
übergeben bekommt. Die Komponente habe ich on WebBrowser abgeleitet.

Folgenden Fehler erhalte ich:
Fehler beim Abrufen von IWebBrowser2 aus dem systemeigenen
ActiveX-Steuerelement.

Hier mein Code (Bei Navigate habe ich erst einmal nur einen String, soll
dann durch ein Array mit Url's ersetzt werden):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace WebComponente
{
class MyThreadHandler
{
private WebCom wb;
private bool terminated = false;
public MyThreadHandler(WebCom wbc)
{
this.wb = wbc;
}

public void Resize()
{
}

public void terminate()
{
terminated = true;
}

public void Work()
{
while (!terminated)
{
wb.Navigate(@"http://www.google.de");
Thread.Sleep(wb.Delay);
}
}
}
public partial class WebCom : WebBrowser
{
private Thread thread;
private MyThreadHandler mth;
private int delay;
private bool webEnabled;
public int Delay
{
get
{
return delay;
}
set
{
delay = value > 1000 ? value : 1000;
}
}
public WebCom()
{
InitializeComponent();
delay = 1000;
}
public bool WebEnabled
{
get {
return webEnabled;
}
set
{
webEnabled = value;
if (value)
{
if (thread != null)
{
mth.terminate();
thread.Join();
}
mth = new MyThreadHandler(this);
thread = new Thread(new ThreadStart(mth.Work));
thread.Start();
}
else
{
if (thread != null)
{
mth.terminate();
thread.Join();
}
}
}
}
}
}

Brian
 

Lesen sie die antworten

#1 Thomas Scheidegger [MVP]
29/08/2007 - 14:29 | Warnen spam
Hallo Brian

wb.Navigate(@"http://www.google.de");




was steht schlussendlich hinter 'Navigate' ?
Falls dies ein Aufruf des GUI-ActiveX ist dann ist dies so unzulàssig.
Nur der GUI-Thread sollte das GUI (Controls, Forms, ActiveX) direkt ansprechen.
Andernfalls lies MSDN: Control.InvokeRequired usw.

Nimm da wohl besser gleich einen
System.Windows.Forms.Timer



Thomas Scheidegger - MVP .NET - 'NETMaster'
http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/

Ähnliche fragen