Autor Beitrag
robs
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 01.02.17 15:45 
Hi Leute!
Das war schon merkwürdig. Ich klicke auf (Debug-)"Starten" und nichts passiert.
Neu erstellen erzeugt einen Fehler: Auf die Datei kann nicht zugegriffen werden. Ein anderer Prozess greift darauf zu.

googeln hat ergeben: Es liegt wohl an Threads, die von der letzten Ausführung noch übrig sind.

Tatsächlich löst sich das Problem von selbst wenn ich mit "Starten" nur lange genug warte.
Es taucht auch nur auf wenn ich beim letzten Lauf den Code schrittweise ausgeführt und vorzeitig per "Debugging beenden" abgebrochen habe (oder mir eine unbehandelte Exception eingehandelt habe)


a) Das ist dämlich. Gibt es irgendeine Einstellung die ich setzen muss?
b) Ist das meine Schuld? muss ich irgendwas in den Code schreiben, um die Threads manuell aufzuräumen?

Ich fange grad erst an. Im Moment lese ich mich ins Thema FileStream ein. Das Programm ist eine einfache Konsolen-Anwendung. Ich benutze Windows 7.
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:
namespace TestConsole
{
    class Program
    {
        [Serializable]
        class Test
        {
            public int i;
            public string str;
            public Test (bool bChildren)
            {
                i = (new Random()).Next();
                str = i.ToString();
            }
        }
        static void Main(string[] args)
        {
            try
            {
                List<Test> lstTest = new List<Test>();
                lstTest.Add(new Test(true));
                lstTest.Add(new Test(true));
                lstTest.Add(new Test(true));

                using (var fs = File.Create("test.dat"))
                {
                    var formatter = new BinaryFormatter();
                    foreach (var item in lstTest)
                        formatter.Serialize(fs, item);

                    fs.Close();

                }
                using (var fs = File.Open("test.dat", FileMode.Open))
                {
                    var formatter2 = new BinaryFormatter();
                    List<Test> lstLoadedTest = new List<Test>();

                    while (fs.Position < fs.Length)
                        lstLoadedTest.Add((Test)formatter2.Deserialize(fs));

                    Console.WriteLine("done.");
                    fs.Close();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 01.02.17 17:30 
Hallo und :welcome:

eigentlich sollte "Debugging beenden" den Prozess auch mit beenden ("killen"), aber ich kenne das auch, daß ab und zu der zu debuggende Prozess hängt (und dadurch kann dann beim Neuerstellen diese Datei nicht überschrieben werden).
Du könntest im Task-Manager diesen Prozess dann beenden.

Bei deinem Code fängst du ja selbst jede Exception, d.h. der Prozess sollte sich danach dann ordnungsgemäß selbst beenden - oder hast du damit auch Probleme?
robs Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 01.02.17 20:01 
Tatsächlich!
Der Try catch block scheint das Problem behoben zu haben ohne dass ich es bemerkt hatte.
Ich hatte ihn zwischendurch fix eingebaut einfach nur so weil er halt da sein sollte.
Das Programm ist nur ein Sandkasten zum ausprobieren. Der Code ändert sich im Minutentakt.

try catch auskommentiert, und ist das Problem sofort wieder da.

Na denn...
Vielleicht liest das hier irgendwann mal irgendjemand anderes dann war's nicht ganz umsonst
:)