WinFuture-Forum.de: C# - Programmabsurz ohne Meldung - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C# - Programmabsurz ohne Meldung


#1 Mitglied ist offline   Stefan24 

  • Gruppe: aktive Mitglieder
  • Beiträge: 151
  • Beigetreten: 17. Februar 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. März 2011 - 13:30

Hallo,

Ich habe ein kleines Programm geschrieben, das allerdings einen Fehler hat. Allerdings wird beim Debuggen kein Fehler angegeben, sondern das Programm beendet sich einfach. Woran kann das liegen? Hier die relevanten Codezeilen:

Program.cs
public class FileSystemWatcher_Grid : FileSystemWatcher
	{
		public DataGridView grid;
	}


Form1.cs
DataGridView tabelle = new DataGridView();

... hier ist zeug das "tabelle" definiert ...

FileSystemWatcher_Grid FSW = new FileSystemWatcher_Grid();
			FSW.Path = name;
			FSW.grid = tabelle;
			FSW.Filter = "*.mp3";
			FSW.Created += new FileSystemEventHandler(ordner_watch);
			FSW.Deleted += new FileSystemEventHandler(ordner_watch);
			FSW.EnableRaisingEvents = true;


		void ordner_watch(object sender, EventArgs e)
		{
			MessageBox.Show("A");
			FileSystemWatcher_Grid grid = (FileSystemWatcher_Grid)sender;
			MessageBox.Show("B");
			grid_refresh(grid.grid, grid.Path);
		}


(edit: siehe nächster Codeblock unten)

Habt ihr eine Idee?

Dieser Beitrag wurde von Stefan24 bearbeitet: 14. März 2011 - 14:21

Eingefügtes Bild

Eingefügtes Bild
0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.686
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 14. März 2011 - 13:47

FileSystemWatcher_Grid grid = (FileSystemWatcher_Grid)sender;

Wahrscheinlich ist sender keine Instanz der Klasse FileSystemWatcher_Grid und somit bricht das Casting ab.

Mach mal einen try-catch Block drumherum und lass dir die Exception ausgeben.
0

#3 Mitglied ist offline   Stefan24 

  • Gruppe: aktive Mitglieder
  • Beiträge: 151
  • Beigetreten: 17. Februar 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. März 2011 - 14:20

Sorry, ich habs auch noch falsch beschrieben und einen Codeblock vergessen:

public void grid_refresh(DataGridView grid, String name)
		{
			MessageBox.Show("C" + grid.ToString());
			try
			{
				grid.Rows.Clear();
			}
			catch (Exception b)
			{
				MessageBox.Show(b.ToString());
			}
			MessageBox.Show("D");
			..........

		}


A, B und C (mit Hinweis auf DataGridView) werden angezeigt, dann wird die Exeption gezeigt, die ich mal angehängt habe.

Angehängte Miniaturbilder

  • Angehängtes Bild: Unbenannt.gif

Dieser Beitrag wurde von Stefan24 bearbeitet: 14. März 2011 - 14:23

Eingefügtes Bild

Eingefügtes Bild
0

#4 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.686
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 14. März 2011 - 14:26

Die Meldung der Exception spricht doch für sich. Du darfst von einem zweiten Thread heraus nicht auf Elemente der Oberfläche zugreifen.
0

#5 Mitglied ist offline   Stefan24 

  • Gruppe: aktive Mitglieder
  • Beiträge: 151
  • Beigetreten: 17. Februar 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. März 2011 - 18:06

Ich habe eigendlich gar keine neuen Threads gemacht, das ist es ja was mich verwirrt.
Eingefügtes Bild

Eingefügtes Bild
0

#6 Mitglied ist offline   cattas 

  • Gruppe: aktive Mitglieder
  • Beiträge: 170
  • Beigetreten: 24. Dezember 06
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 14. März 2011 - 20:18

Hallo,
doch der FileSystemWatcher ist ein eigener Thread. Du soltest das über einen Delegate lösen.
http://en.wikibooks....ates_and_Events ://http://en.wikibooks.org/wiki/C_Shar...tes_and_Events
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0