2017-04-27 2 views
3

Ich bin eine mittlere WinForms-Anwendung codieren ... hin und wieder bei der Erstellung bestimmter Formulare ich bekomme diese Ausnahme.'System.OutOfMemoryException': Fehler beim Erstellen des Fensterhandle

ich es in der Vergangenheit gelöst, aber ohne richtigen udnerstanding das, was los ist ...

Der rätselhafte Teil ist, dass alles in Ordnung gestern gearbeitet, als ich diese Form finnished und es getestet, jetzt bekomme ich dies:

Eine nicht behandelte Ausnahme des Typs 'System.OutOfMemoryException' aufgetreten in System.Windows.Forms.dll

Zusätzliche Informationen: Fehler Fenstergriff zu schaffen.

Ausnahme ist in diesem Block von Code ausgelöst:

public partial class PonovniIspisRacunaForm : Form 
     {  

     DataTable dnevniPrometTable; 
     DataTable kontrolnaTrakaTable; 
     DataTable ukupniDnevniPrometTable; 
     DataTable stavkeRacunaTable; 
     ZisCode.Hibernate.Mdb.DataModel dnevniPrometDataModel; 
     ZisCode.Hibernate.Mdb.DataModel kontrolnaTrakaDataModel; 
     OsnovniPodaci.Porezi.Stope stope; 
     string brojRacuna; 
     string ZKI; 
     string JIR; 
     string Operator; 
     //decimal ukupno = 0.00m; 

     decimal tarifa; 
     decimal kolicina; 
     decimal iznos; 
     decimal porez; 
     decimal porez25; 
     decimal porez05; 
     decimal porez13; 
     decimal povratnaUkupno; 
     decimal osnov25; 
     decimal osnov05; 
     decimal osnov13; 
     //decimal nabavna; 

     PrintDocument printDocument; 

     public PonovniIspisRacunaForm() 
     { 
      InitializeComponent(); 
     } 

    private void FinancijskiRekapitular_Load(object sender, EventArgs e) 
      { 
       stope = new OsnovniPodaci.Porezi.Stope(); 

       // popunjava današnji datum 
       this.dtpDatum.Value = DateTime.Today; 

       // Get Data Table za određeni datum: 
       dnevniPrometDataModel = ZisCode.DataModels.Get("DnevniPromet"); 
       kontrolnaTrakaDataModel = ZisCode.DataModels.Get("KontrolnaTraka"); 

       PrintSetup(); 

       ukupniDnevniPrometTable = MergeDnevniKontrolna(); 
       if (ukupniDnevniPrometTable.Rows.Count != 0) 
       { 
        FillComboBox(); 
      } 
     } 
    private void FillComboBox() 
      { 
       cbBrojRacuna.DataSource = ZisCode.Methods.DataTableOperations.SortDataTable(ukupniDnevniPrometTable, "Dokument", "DESC") // orderbydescending 
        .AsEnumerable().GroupBy(row => row.Field<string>("Dokument")).Select(group => group.First()).CopyToDataTable(); // groupby brojRacuna-Dokument 
       cbBrojRacuna.DisplayMember = "Dokument"; // Broj Računa 
       cbBrojRacuna.ValueMember = "Dokument"; 
       cbBrojRacuna.SelectedIndex = 0; 
      } 

      private void PrintSetup() 
      { 
       // priprema za ispis 
       printDocument = new PrintDocument(); 
       printDocument.DefaultPageSettings.PaperSize = new PaperSize("Racun size", 295, 500); 
       printDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(CreateRekapitular); 
       // uklanja poruku dialog box (printing ..) kod ispisa 
       PrintController printController = new StandardPrintController(); 
       printDocument.PrintController = printController; 
       // popravlja font 
       printPreview.UseAntiAlias = true; 
      } 
} 

spezifischere diese Linie zu sein: this.dtpDatum.Value = DateTime.Today; Warum? Ich habe keine Ahnung ...

Ich habe versucht, dateTimePicker im Konstruktor und ich habe verschiedene Ausnahme ohne Bezug zu Fenstergriff.

Ich habe über diesen Fall auf andere Fragen gelesen, aber nichts hat wirklich für mich geklickt.

Winforms issue - Error creating window handle

Error Creating Window Handle

Diese beiden Antworten helfen mir nicht, da Antworten auf mehrdeutig sind und erwarten, dass ich angeblich wissen, wie entsorgen ist in erster Linie zu arbeiten. Hilfe, ich bin ein n00b!

UPDATE Geschrieben Fast alle Code der Klasse als ich

+0

Können Sie einen Code für PrintSetup und FillComboBox() hinzufügen? Haben Sie einige allgemeine Variablen und was machen Sie beim Schließen des Formulars? –

+0

@WaiFungAuYeung Ja, ich habe eine Menge Variablen und beim Schließen des Formulars habe ich nicht zur Verfügung lol wie soll ich es tun? Obwohl diese Ausnahme beim Laden des Formulars ausgelöst wird – ChenChi

+0

Ich aktualisierte die Frage mit mehr Code – ChenChi

Antwort

1

Da Ihre Ausnahme gefragt wurde, ist OutOfMemory es sein kann, dass Sie nur aus der Erinnerung sind. Überprüfen Sie den Task-Manager, um zu sehen, wie viel Speicher Ihnen zur Verfügung steht, und ich würde vorschlagen, Ihre App über einen Speicher-Profiler wie RedGate oder etwas Ähnliches auszuführen, um zu sehen, wo das Leck ist. Im Falle der Entsorgung werfen Sie einen Blick auf diese asnwer für weitere Informationen C# Form.Close vs Form.Dispose

+1

Ich glaube nicht, dass das Problem ist, könnte es sein, dass dateTimePicker nicht verfügt (?!), Da es ein benutzerdefiniertes Benutzersteuerelement ist .. Ich bin nicht sicher, ich rate nur hier, weil dtp ist die Quelle der Ausnahme – ChenChi

4

Ein Fenster-Handle ist eine nicht verwaltete Ressource. Es gibt nur so viele von ihnen. Wenn Sie diese Handles nicht freigeben, wird Windows auslaufen und Sie werden Ausnahmen erhalten.

Klassen, die native HANDLE verwenden, müssen sie freigeben, wenn sie nicht mehr benötigt werden. Diese Klassen implementieren IDisposable. Sie sollten dies untersuchen, es ist ein Kernbestandteil von .NET und entscheidend für die Arbeit mit nicht verwalteten Ressourcen wie Handles.

Schalten Sie den statischen Code-Analyse (Rechtsklick auf Project ->Properties ->Code Analysis und wählen Sie Enable on build und Pick Microsoft all rules) und alle Verletzungen beheben, vor allem diejenigen nicht angeordnet IDisposable s.

+0

nvoigt danke für die Antwort, ich wusste nicht, diese Option existiert sogar - jetzt fühle ich mich wie große n00b ... – ChenChi

0

Das Problem war, private void

dtpDatum_TextChanged(object sender, EventArgs e) 
{ 
    ukupniDnevniPrometTable = MergeDnevniKontrolna(); 
    FillComboBox(); 
} 

Ich denke, diese Veranstaltung wurde zu oft angefeuert und verursacht ein Speicherleck

Verwandte Themen