2016-07-26 8 views
0

現在、私はいくつかのアイテム情報を表示するプログラムを持っています。私が持っているのはcom boxで、別のカテゴリを行使し、1パネルは選択あたりのアイテムをcom boxに表示することです。C#のパネルにカスタムコントロールを追加すると、ウィンドウ作成の例外を処理する方法は?

独自のカスタムコントロールを作成して表示しましたが、パネルに動的に追加すると、Create Window handle ErrorというWin32 Exceptionが表示されます。

何度かテストした後、パネルに合計1800個のカスタムコントロールがリストされているのに気付きましたが、例外が発生します。この問題を解決できる人はいますか?ありがとう。

private void DisplayItems(List<ITEM_DATA> ItemList) 
{ 
    DisposeControls(); 
    int total = ItemList.Count; 

    ItemDisplayer itemDisplayer = null; 
    Application.DoEvents(); 
    for (int i = 0; i < total/4 + 1; i++) 
    { 
     for (int j = 0; j < 4; j++) 
     { 
      int m = (i * 4) + j; 
      if (m >= total) 
      { 
       return; 
      } 
      itemDisplayer = new ItemDisplayer(ItemList[m], ref labItemName); 
      itemDisplayer.Size = new Size(240, 80); 
      itemDisplayer.Location = new Point(240 * j, 80 * i); 
      itemDisplayer.Name = "itemDisplayer" + Convert.ToString(m); 
      pnlItems.Controls.Add(itemDisplayer); 
     } 
    } 
} 
+0

あなたが使用するプログラムのすべての*は、65535のWindowsのハード上限を持っている*によって作成されたプログラムは、その不公平なシェアを取ることができないことを保証することができますウィンドウの合計数によると

// Flag: Has Dispose already been called? bool disposed = false; // Instantiate a SafeHandle instance. SafeHandle handle = new SafeFileHandle(IntPtr.Zero, true); // Public implementation of Dispose pattern callable by consumers. public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } // Protected implementation of Dispose pattern. protected virtual void Dispose(bool disposing) { if (disposed) return; if (disposing) { handle.Dispose(); // Free any other managed objects here. // } // Free any unmanaged objects here. // disposed = true; } 

合計を10000に制限します。この制限を超えると、この例外が発生します。たぶんあなたがコントロールを漏らしている、タスクマネージャーを使用して合計を見ることができるようにユーザーオブジェクトの列を追加します。しかし、あなたがよりスマートなコードを書くために必要な高い確率、1800はすでにかなり不合理です。 –

+0

はい、私はあなたの提案に従った。問題はユーザーオブジェクトが10000に達したことです。解決方法はありますか?ありがとう –

答えて

1

ただ確認したい。しばらく過ごしてからこの問題が発生した場所を特定してください。私はUser Objectが限界10000に達したことに気付きました。そして、私はちょうどユーザーコントロールを適切に処分することによってその問題を解決しました。

私はカスタムコントロールクラスにdisposeメソッドを実装しています。 enter link description here

関連する問題