ich habe in der Vergangenheit bis jetzt über IProgress den Aufrufer informiert. Jetzt soll das Ganze auch über Events geschehen. Hier gesellt sich entsprechend das Problem mit dem Zugriff auf das UI, welches mir z.Z. Probleme bereitet. Ich bekomme es nicht hin, dass der Aufrufer die durch das Event überbrachten Daten anzeigen kann, da es sich halt um einen anderen Thread handelt und somit eine Exception geworfen wird. Unten findet sich ein 0815 Beispiel dazu. Wie könnte ich die Daten aus dem Event im Formular anzeigen, ohne die Exception zu werfen?
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private Test _Test;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
_Test = new Test();
_Test.Progress += (o, i) => { label1.Text = i.ToString(); };
}
private async void button1_Click(object sender, EventArgs e)
{
await _Test.MyCalculation();
}
}
public class Test
{
public event EventHandler<int> Progress;
public async Task MyCalculation()
{
int c = 1000000;
await Task.Run(() =>
{
for (int i = 0; i < c; i++)
{
if (i % 7 == 0)
{
this.Progress?.Invoke(this, i);
}
}
});
}
}
}
Gruß