real-insanity
Erfahrenes Mitglied
Hallo zusammen,
ich habe nun folgendes Problem:
In meiner Anwendung werden aus einer DB alle CDs mit den entsprechenden Tracks in einem Treeview aufbereitet und ausgegeben (siehe Anhang).
Da die Datenmenge hoch sein (200 CDs á 11 Tracks) kann und ich nicht möchte, dass die Form hängt, rufe ich die Funktion in einem anderen Thread aus.
Dennoch hängt bei mir die Form, sobald der Treeview aufbereitet wird.
Hier der Aufruf der Funktion:
Die Funktion:
Ich hab ehrlich gesagt keine Ahnung woran es liegt.
Eigentlich sollte doch durch den Thread die Form normal weiter arbeiten und nicht erst auf die Daten für den Treeview warten, oder?
ich habe nun folgendes Problem:
In meiner Anwendung werden aus einer DB alle CDs mit den entsprechenden Tracks in einem Treeview aufbereitet und ausgegeben (siehe Anhang).
Da die Datenmenge hoch sein (200 CDs á 11 Tracks) kann und ich nicht möchte, dass die Form hängt, rufe ich die Funktion in einem anderen Thread aus.
Dennoch hängt bei mir die Form, sobald der Treeview aufbereitet wird.
Hier der Aufruf der Funktion:
Code:
...
new Thread(new ThreadStart(FillTreeView)).Start();
...
Die Funktion:
Code:
private void FillTreeView()
{
TreeNode root;
if (treeView1.InvokeRequired)
{ // Wenn Invoke nötig ist, ...
// dann rufen wir die Methode selbst per Invoke auf
treeView1.Invoke(new MethodInvoker(FillTreeView));
return;
}
treeView1.Nodes.Clear();
root = SearchTreeView(treeView1, "Bibliothek");
if(root == null){
root = treeView1.Nodes.Add("Bibliothek");
}
root.Tag = "Root";
DataSet dsCDs = DataHelper.GetCDs();
try
{
foreach (DataRow rowCD in dsCDs.Tables[0].Rows)
{
int cdID = Convert.ToInt32(rowCD["ID"]);
TreeNode childRoot = new TreeNode(rowCD["Name"].ToString());
root.Nodes.Add(childRoot);
childRoot.ImageIndex = 1;
childRoot.Tag = "CD";
childRoot.SelectedImageIndex = 1;
childRoot.Parent.Expand();
// childRoot.ContextMenu.Show = true;
DataSet dsTracks = DataHelper.GetCDTracksByID(cdID);
foreach (DataRow rowTrack in dsTracks.Tables[0].Rows)
{
TreeNode childCD = new TreeNode("#" + rowTrack["Nr"].ToString() + " " + rowTrack["Artist"].ToString() + " - " + rowTrack["Title"].ToString());
childRoot.Nodes.Add(childCD);
childCD.ImageIndex = 2;
childCD.Tag = "Track";
childCD.SelectedImageIndex = 2;
}
dsTracks.Dispose();
}
dsCDs.Dispose();
}
catch (Exception e)
{
if (DebugSession == false)
{
MessageBox.Show("Fehler in FillTreeView(): " + e.Message);
}
else
{
Debug.listBox1.Items.Add("[" + DateTime.Now + "] Fehler in FillTreeView(): " + e.Message);
}
}
}
Ich hab ehrlich gesagt keine Ahnung woran es liegt.
Eigentlich sollte doch durch den Thread die Form normal weiter arbeiten und nicht erst auf die Daten für den Treeview warten, oder?
Anhänge
Zuletzt bearbeitet: