Hallo,
in einer Form habe ich ein Event welches meine dll aufruft wenn es getriggert wird. In dieser dll laufen dann einige Berechnungen und während dieser Zeit wollte ich eine Progressbar anzeigen lassen. Nur leider weiß ich überhaupt nicht wie ich weitermachen soll.
Fehlermeldung: {"Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement progressBar1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."}
Hier dachte ich, dass ich durch BeginInvoke den Form-Thread nicht verlasse...?
Auch ist der Aufruf "backgroundWorker1.RunWorkerAsync(); " an der falschen Stelle. Denn an der Stelle wurden die Berechnungen schon längst erledigt..
nur wo in der Form soll ich den Worker aufrufen?
Oder muss ich den Worker schon in die dll integrieren?
in einer Form habe ich ein Event welches meine dll aufruft wenn es getriggert wird. In dieser dll laufen dann einige Berechnungen und während dieser Zeit wollte ich eine Progressbar anzeigen lassen. Nur leider weiß ich überhaupt nicht wie ich weitermachen soll.
Fehlermeldung: {"Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement progressBar1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."}
Hier dachte ich, dass ich durch BeginInvoke den Form-Thread nicht verlasse...?
Code:
namespace DLLTest
{
public partial class Form1 : Form
{
Initialisierung init = new Initialisierung();
OnDataEvent dataTest = new OnDataEvent();
public delegate void IDDelegate(DataEvent e);
public Form1()
{
InitializeComponent();
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= 100; i++)
{
backgroundWorker1.ReportProgress(i);
}
e.Cancel = true;
}
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// The progress percentage is a property of e
progressBar1.Value = e.ProgressPercentage;
}
private void Form1_Load(object sender, EventArgs e)
{
private void button1_Click(object sender, EventArgs e)
{
dataTest.DDataEvent += new EventHandler<DataEvent>(this.ReceivedData2);
init.start(dataTest);
}
private void ReceivedData2(object sender, DataEvent e)
{
backgroundWorker1.RunWorkerAsync();
this.BeginInvoke(new DDelegate(this.DataRec2), e);
}
public void DataRec2(DataEvent e)
{
if (e.PictureFile != "")
{
pictureBox1.ImageLocation = e.PictureFile;
pictureBox1.Load();
}
}
private void label1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
pictureBox1.ImageLocation = "";
dataTest.DDataEvent -= new EventHandler<DataEvent>(this.ReceivedData2);
init.ResetD();
}
}
}
Auch ist der Aufruf "backgroundWorker1.RunWorkerAsync(); " an der falschen Stelle. Denn an der Stelle wurden die Berechnungen schon längst erledigt..
nur wo in der Form soll ich den Worker aufrufen?
Oder muss ich den Worker schon in die dll integrieren?
Zuletzt bearbeitet: