Autor Beitrag
Chiyoko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Mi 25.01.12 15:38 
Huhu,

ich habe ein kleines Program geschrieben, was mir alle Ordner und Dateien eines Pfades einliest.
Ist es ein Ordner, wird die Methode rekursiv erneut aufgerufen.

Diese Prozedur lagert in einem Backroundworker.
Des Weiteren werden alle Ordner und Daten in ein Treeview geladen.

Jedes mal, wenn ich in dem Treeview einen Knoten anklicke, soll die Methode anspringen
und die Ordner oder Dateien einlesen.

Mein Problem:
Jedes mal, wenn ich den Knoten aendere, sollen alle Werte auf 0 gesetzt werden und der Backgroundworker
soll erneut starten.(Oder ganz ausgehen, wenn der treeview den Fokus verliert).
Jetzt habe ich es mit dem Index und dem Namen versucht aber mit nichts von alle dem kann ich den Backgroundworker
neu initialisieren oder gar die Methode abbrechen.

Wie ich den Backgroundworker beende ist mit weitest gehend klar.(Aber das ist ja nicht das Problem, es geht nur um den knoten).

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
bw.CancelASync(); // Anfrage senden

// und im Worker selbst 
e.Cancel = true

// oder
if (bw.CancellationPending)
{
    e.Cancel = true;
}


Weis jemand weiter?
Danke.

Codefragmente:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
        if(e.Node.Nodes.Count == 0)
        AllSubDirectories(e.Node);

        if (e.Node.IsSelected)
        {
            Global.LoescheStatistik();

            DirectoryInfo dir;
            dir = new DirectoryInfo(e.Node.FullPath);

            lblDateipfad.Text = dir.FullName;
            toolStripProgressBar1.MarqueeAnimationSpeed = 0;

            if (e.Node.GetNodeCount(true) > 0)
            { 
                toolStripProgressBar1.MarqueeAnimationSpeed = 45;
                toolStripProgressBar1.Style = ProgressBarStyle.Marquee;
                Global.LoescheStatistik();
                Global.pfadListe.Add(e.Node.FullPath);               

                if (!backroundworkerDatenSuchen.IsBusy)
                    backroundworkerDatenSuchen.RunWorkerAsync();
            }
        }
}


// Im Backgroundworker startet dann diese Methode:
public void SucheAlleDaten(List<string> pfade)
{
    FileInfo[] arrFileInfoSA;
    DirectoryInfo[] arrDirInfoSA;

    try
    {
        for (int i = 0; i < pfade.Count; i++)
        {
            string[] strAllList = Directory.GetFileSystemEntries(pfade[i]);

            for (int j = 0; j <= strAllList.GetUpperBound(0); j++)
            {
                if (0 == (File.GetAttributes(strAllList[j]) & FileAttributes.Directory))
                {
                    arrFileInfoSA = new FileInfo[1] { new FileInfo(strAllList[j]) };
                    foreach (FileInfo ff in arrFileInfoSA)
                    {
                        CountFileInfo.Add(ff);
                    }
                }
                else
                {
                    arrDirInfoSA = new DirectoryInfo[1] { new DirectoryInfo(strAllList[j]) };
                    foreach (DirectoryInfo dd in arrDirInfoSA)
                    {
                        if (dd.Name != "Windows")
                        {
                            CountDirInfo.Add(dd);
                            pfade.Clear();
                            pfade.Add(dd.FullName);
                            SucheAlleDaten(pfade);
                        }
                    }
                }
            }
        }      
    }
    catch { }
}
Chiyoko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Mi 25.01.12 23:44 
Ich sollte hinzufuegen, dass der Backroundworker wie vorgesehen abbrochen wird.
Komme ich aber in einen Ordner mit mehr als 1000 Unterordnern, bricht dieser nicht mehr ab.
(So mein Gefuehl).