Toon posts:

[C#] DriveInfo bekijken

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo, ik heb onderstaande code waar ik drives van mijn systeem ophaal en invul in een TreeviewItem,
C#:
30
31
32
33
34
35
36
37
38
39
foreach (DriveInfo drive in handler.getDrives())
            {
               
                    treeViewItem = new TreeViewItem();
                    treeViewItem.Tag = drive;                    
                    treeViewItem.Header = drive.Name + drive.VolumeLabel;
                    treeViewItem.Items.Add("*");
                    treeView.Items.Add(treeViewItem); 
                
            }


dit geeft onderstaande fout van zodra ik de applicatie start:

Cannot create instance of 'Window1' defined in assembly 'TreeViewTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Exception has been thrown by the target of an invocation. Error in markup file 'Window1.xaml' Line 2 Position 5.

als ik nu in regel 35 de drive.VolumeLabel verijder werkt wel alles normaal. dus ik dacht ik ga die regel eens debuggen en krijg dan: 'function evaluation timed-out'

nu dacht ik dat dat ongeveer hetzelfde is als een NullPointerException en probeer deze error dus te catchen, en als ik dat doe dan werkt het inderdaad, maar waarom krijg ik dan niet gewwoon nullpointerexception te zien , maar die hele uitleg van 'cannot create instance...' en 'function evaluation timed out....'?

Acties:
  • 0 Henk 'm!

  • GrooV
  • Registratie: September 2004
  • Laatst online: 08:58
Verwijderd schreef op maandag 13 april 2009 @ 16:25:
Hallo, ik heb onderstaande code waar ik drives van mijn systeem ophaal en invul in een TreeviewItem,
C#:
30
31
32
33
34
35
36
37
38
39
foreach (DriveInfo drive in handler.getDrives())
            {
               
                    treeViewItem = new TreeViewItem();
                    treeViewItem.Tag = drive;                    
                    treeViewItem.Header = drive.Name + drive.VolumeLabel;
                    treeViewItem.Items.Add("*");
                    treeView.Items.Add(treeViewItem); 
                
            }


dit geeft onderstaande fout van zodra ik de applicatie start:

Cannot create instance of 'Window1' defined in assembly 'TreeViewTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Exception has been thrown by the target of an invocation. Error in markup file 'Window1.xaml' Line 2 Position 5.

als ik nu in regel 35 de drive.VolumeLabel verijder werkt wel alles normaal. dus ik dacht ik ga die regel eens debuggen en krijg dan: 'function evaluation timed-out'

nu dacht ik dat dat ongeveer hetzelfde is als een NullPointerException en probeer deze error dus te catchen, en als ik dat doe dan werkt het inderdaad, maar waarom krijg ik dan niet gewwoon nullpointerexception te zien , maar die hele uitleg van 'cannot create instance...' en 'function evaluation timed out....'?
Die exception krijg je als je in Visual Studio bij Debug -> Exceptions alle CLR exceptions laat throwen

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Dit stukje komt me erg bekend voor (weet alleen niet meer waarvan). De reden dat je een fout krijgt komt omdat niet alle drives een VolumeLabel hebben. Denk aan een diskette station zonder diskette, een DVD drive zonder DVD, etc. Voordat je VolumeLabel (en een aantal andere properties zoals DriveFormat, TotalSize) uitleest moet je eerst controlen of de IsReady property true terug geeft..

Hiervoor een NullReferenceException voor afvangen is eigenlijk een verkeerde oplossing.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • CHeff
  • Registratie: Oktober 2002
  • Laatst online: 19-09 23:37

CHeff

Allemaal gekkigheid

Als de drive nog niet klaar staat dan word er een IOException gegooid. Duurt wel even voordat hij gegooid wordt, dus ik zou een controle doen op de IsReady ;)