Problem mit ImageList im CompactFramework



  • Hallo,

    ich habe bei mir zwei ImageListen erstellt und entsprechend Bilder hinzugefügt. In der Resourcen-Datei unter Bilder werden sie auch korrekt angezeigt. Beim ausführen der Anwendung erhalte ich aber immer eine Exception an der Stelle vom WindowsForm generierten Code:

    this.imageList_Large.Images.Add(((System.Drawing.Image)(resources.GetObject("resource"))));
    
    this.imageList_Large.ImageSize = new System.Drawing.Size(32, 32);
    this.imageList_Large.Images.Clear();
    this.imageList_Large.Images.Add(((System.Drawing.Image)(resources.GetObject("resource"))));
     this.imageList_Large.Images.Add(((System.Drawing.Image)(resources.GetObject("resource1"))));
    this.imageList_Large.Images.Add(((System.Drawing.Image)(resources.GetObject("resource2"))));
    

    Die Exception lautet folgendermaßen:

    System.NotSupportedException wurde nicht behandelt.
    Message="System.Drawing.Bitmap"
    StackTrace:
    bei System.Resources.ResourceReader.LoadObjectV2()
    bei System.Resources.ResourceReader.LoadObject()
    bei System.Resources.RuntimeResourceSet.GetObject()
    bei System.Resources.ResourceManager.GetObject()
    bei System.Resources.ResourceManager.GetObject()
    bei DynamicPocketHBM.MyOpenFileDialog.InitializeComponent()
    bei DynamicPocketHBM.MyOpenFileDialog..ctor()
    bei DynamicPocketHBM.Form1.Form1_Load()
    bei System.Windows.Forms.Form.OnLoad()
    bei System.Windows.Forms.Form._SetVisibleNotify()
    bei System.Windows.Forms.Control.set_Visible()
    bei System.Windows.Forms.Application.Run()
    bei DynamicPocketHBM.Program.Main()

    Ich verwende hierbei eine zweite WindowsForm, die von der ersten erzeugt wird.
    Kann mir jemand erklären was hier falsch läuft.
    Danke!



  • An welcher der Zeilen kracht es genau ?
    Ist es die "erste Chance" oder eine unbehandelte Exception ? (IM CF fliegen im Zusammenhang mit den Ressourcen in Initalisierung gerne mal Exceptions die vom Framework selbst gefangen werden. Also nur auffallen wenn man den Debugger dazu bewegt, die erste Chance zu fangen.)



  • Hallo,
    es kracht genau an der Stelle hier

    this.imageList_Large.Images.Add(((System.Drawing.Image)(resources.GetObject("resource"))));
    

    also bei der ersten Resource die ich hinzufügen will. Die Meldung von der "ersten Chance" steht nicht dabei.
    Ich habe eben nochmal ein ganz neues Projekt (Windows Mobile 5.0 Pocket PC) angefangen und lediglich eine ImageList eingefügt. Da kommt er dann problemlos über das laden drüber raus. Anscheind ist etwas bei der Projekteinstellung nicht mehr in Ordnung.



  • hi,
    das ist zwar ein sehr alter Thread aber versuche trotzdem mal mein Glück;-)

    Ich hab nämlich zur Zeit das gleiche Problem

    Meine Anwendung,, für mein Handy, fügt Bilder in eine ImageList hinzu. Diese Anwendung funktionierte im Emulator ohne Probleme doch als ich sie auf meinem
    Handy ausgeführt hatte, bekam ich eine Exception, genau bei dem Versuch ein weiteres Bild in das ImageList-Obejekt einzufügen.
    Also, hab ich versucht herauszubekommen warum die Anwendung im Emu nicht kracht. In meinen Handy konnte ich ungefähr 900 Bilder einfügen und auf den Emu 1400 bis Schluss war. Eigentlich liegt es auf der Hand, dass es wahrscheinlich ein Speicherproblem ist und die Anwendung wahrscheinlich kein weiteren Speicher allokieren kann. Aber als ich in den Taskmanager geschaut hab sah ich, dass die Anwendung nicht wirklich viel Speicher belegt hat, da die Bilder auch nicht sehr groß waren (32x32x32).
    Also habe ich versucht minimal Anwendung für C# zu erzeugten, die sich ähnlich verhält. Auch hier tritt diese Exception auf zwar deutlich später als auf den Handy aber dennoch belegt die Anwendung gerade mal 20mb im Speicher. Stellt sich nun nur die Frage was wir beim hinzufügen der Bilder falsch machen. Hier der Beispiel Code :

    public Form1()
    		{
    			InitializeComponent();
    			ListViewItem tItem;
    			listView1.LargeImageList = new ImageList();
    			listView1.LargeImageList.ImageSize = new Size(32,32);
    			listView1.SmallImageList = new ImageList();
    			System.Drawing.Icon tIcon;
    			tIcon = WindowsFormsApplication1.Properties.Resources.Icon1;
    			for (int tIdx = 0; tIdx < 3500; tIdx++)
    			{
    				try
    				{
    					if (tIdx == 2489)
    						MessageBox.Show("now");
    					tItem = new ListViewItem("test" + tIdx.ToString());
    
    					listView1.LargeImageList.Images.Add(tIcon);
    					listView1.SmallImageList.Images.Add(tIcon);
    					tItem.ImageIndex = listView1.LargeImageList.Images.Count - 1;
    					listView1.Items.Add(tItem);                    
    				}
    				catch (Exception e)
    				{
    					MessageBox.Show(e.InnerException.ToString()); ;
    				}				
    			}
    		}
    

    hat jemand eine Idee?


Anmelden zum Antworten