Anwendungstart: Formularanzeige dauert

JK_net

Erfahrenes Mitglied
Hallo!

Ich habe ein Problem mit meinem Anwendungsstart. Und zwar habe ich zum Starten der Anwendung folgenden Code:

Code:
public FrmHauptformular()
 {
   InitializeComponent();
 
   Thread t = new Thread(new ThreadStart(erstelleTerminUebersicht));
   t.Start();
   t.Join();
 }

Die Methode "erstelleTerminÜbersicht" lädt Daten aus Outlook und stellt diese in meinem Programm dar. Allerdings wird mein Formular erst angezeigt, wenn die Verarbeitung erfolgt ist.
Wie bekomme ich denn trotzdem schon während der Verarbeitung mein Formular angezeigt?
Ich dachte, dass es hilft, wenn ich die Methode in einen Extra-Thread (wie oben) auslagere. Hilft aber leider nicht.

Habt ihr eine Lösung für mich?

gruß
Jens
 
Hallo,

jetzt habe ich das t.Join() mal weggenommen und erhalte folgende Fehlermeldung:

Cross-thread operation not valid: Control 'lvwTerminUebersicht' accessed from a thread other than the thread it was created on.

Vielleicht noch wichtig: Ich nutze C# 2005 Express und in der Methode sollen Daten in einem ListView dargestellt werden. Genau dabei tritt der oben geschriebene Fehler auf.

Gruß
Jens
 
Also versuchst du aus dem neuen Thread heraus, auf Controls des Main-Threads zuzugreifen, was nicht sonderlich klug ist.

Besser wäre es, die Daten per Events an den Main-Thread zu geben und dann darzustellen. Hierfür solltest du dann die Invoke()-Methode deines Controls verwenden.
 
Hi!

Sorry, ich habe mit Invoke() noch nie gearbeitet. Hast du dafür ein Beispiel, wie man das macht?

Meine Methode sieht folgendermaßen aus:
Code:
private void erstelleTerminUebersicht()
{
  OfficeHelper.OutlookHelp outlook = new OfficeHelper.OutlookHelp();
  outlook.TermineAuslesen();
  if (outlook.Termine != null)
  {
	foreach (string[] str in outlook.Termine)
	{
	  this.lvwTerminUebersicht.Items.Add(new ListViewItem(new string[] { str[0], str[1], str[2], str[3] + " Std." }));
	}
  }
}

Vielen Dank schon einmal für deine Tipps und deine Hilfe!

Gruß
Jens
 

Neue Beiträge

Zurück