나는 flowLayoutPanel
을 가진 C# win forms 애플리케이션을 가지고 있습니다.계속해서 플로우 레이아웃 패널 윈폼에 추가 및 제거
매초마다이 패널의 모든 하위 항목을 업데이트해야합니다. 나는 이유 따라서 error creating window handle
을 받기 시작 후
public void RefreshReceiversPage()
{
if (checkBox_enableReceivers.Checked)
{
var receivers = OutgoingReceiverManager.GetCopyOfActiveRecieverHolders();
for (int i = 0; i < flowLayoutPanel_receivers.Controls.Count; i++)
{
var tmp = flowLayoutPanel_receivers.Controls[i];
flowLayoutPanel_receivers.Controls[i].Dispose();
tmp.Dispose();
}
flowLayoutPanel_receivers.Controls.Clear();
foreach (var item in receivers.ToList())
{
var tmpUc = new ucReceiverItem(item);
if (flowLayoutPanel_receivers != null)
{
try
{
flowLayoutPanel_receivers.Controls.Add(tmpUc);
}
catch
{
}
}
}
receivers = null;
}
}
지금이 코드는 약 2 분 동안 완벽하게 작동하고 갑자기 여기
내 현재 매 1 초 시스템 타이머에서 호출되는 코드 위의 코드를 시도해보십시오.그러나이 후 창보기가 재미 있고 프로그램을 다시 시작하지 않고 복구 할 수 없습니다.
나는 높고 낮은 것을 찾았으며 예외가 발생했을 때 아무것도 찾을 수없는 것 같습니다.
내가 생각할 수있는 모든 것은 메신저 개체를 적절히 처분하지 못하고 메모리가 부족한 부분이 어디 있는지 생각할 수 있습니다.
아무도 제안이나 해결책이 있습니까?
편집 :
여기입니다 UCRecieverItem :
for (int i = 0; i < flowLayoutPanel_receivers.Controls.Count; i++)
{
var tmp = flowLayoutPanel_receivers.Controls[i];
flowLayoutPanel_receivers.Controls[i].Dispose();
tmp.Dispose();
}
flowLayoutPanel_receivers.Controls.Clear();
그것은 단지 컨테이너에있는 컨트롤의 절반을 배치한다 :이 코드는 문제가
public partial class ucReceiverItem : UserControl
{
public ucReceiverItem(ReceiverHolder item)
{
InitializeComponent();
ConstructItem(item);
item = null;
}
private void ConstructItem(ReceiverHolder item)
{
label_name.Text = item.ReceiverDb.Name;
label_numberOfConnections.Text = item.ReceiverOutgoingConnectionManager.GetNumberOfConnections().ToString();
label_mrFilters.Text = item.ReceiverDb.MrFilters;
label_multipleConnections.Text = item.ReceiverDb.MultipleConnections.ToString();
//
int count = item.GetActiveBufferCount();
int size = item.GetActiveBufferSize();
//
label_bufferCount.Text = count + @"/" + size;
progressBar_buffer.Maximum = size;
progressBar_buffer.Minimum = 0;
progressBar_buffer.Value = count;
}
}
'ucReceiverItem'의 생성자와 Dispose 메서드에서 어떤 일이 발생하는지 조사하는 것은 흥미로운 일이라고 생각합니다. – Fratyx
ucReceiverItem 클래스를 게시합니다. – Zapnologica
그 tmp 변수의 포인트가 무엇인지 모르지만 목록 전체가 줄어들면서 목록에서 항목을 삭제하기 때문에 for 루프 전체가 문제가됩니다. 아마도 'while flp.Controls.Count> 0' 루프가 있고 항상 첫 번째 컨트롤을 처리해야합니다 :'flp.Controls [0] .Dispose();'. – LarsTech