2012-05-08 4 views
0

DLL을 통해 참조되는 두 개의 자식 폼 (독립 실행 형 프로젝트가 참조에 추가됨)이 포함 된 MDI 응용 프로그램을 C#에서 작성했습니다. 하나의 하위 폼 (form1이라고 함)은 타이머를 사용하여 그래픽 개체를 기반으로 애니메이션을 수행합니다. 이 프로젝트 (자식 form1)는 다른 자식 폼 (form2라고 부름)이로드 될 때까지 제대로 작동합니다. 첫 번째 양식 (form1)의 애니메이션이 중지되지만이 두 번째 하위 양식 (form2)을 닫으면 아무런 문제없이 애니메이션이 계속됩니다.서로 간섭하는 두 개의 MDI 자식 폼

나는 Form2를이 코드를 사용하여 간격이 만료되면

private void FlyingBeeForm_Paint(object sender, PaintEventArgs e) { 
    Graphics g = e.Graphics; 
    DrawImages(g); 
    System.Threading.Thread.Sleep(50); 
    this.Invalidate(); 
} 
+0

글쎄, 두 번째 양식은 무엇이 특별합니까? 우리가 아는 전부는 물고기입니다. 단서가 없다면 두 번째 형식의 코드 조각을 주석으로 처리하십시오. –

+0

타이머가없는 애니메이션이기도합니다. 그 form2 (물고기)는 마우스를 클릭하면, 물고기는 클릭 한 곳으로 이동합니다. – falcon2303

+0

음, 거의 확실히 물고기를 움직이기 위해 타이머를 사용해야합니다. 루프를하면 첫 번째 양식의 타이머가 작동을 멈 춥니 다. –

답변

1

타이머는 Windows에서 배달 알림으로가는 유지됩니다. 그러나 매우 낮은 우선 순위 알림이므로 다른 작업을 수행 할 필요가 없을 때만 알 수 있습니다.

이제 Paint 이벤트 처리기의 문제점을 확인해야합니다. 하나 들어, 어떤 작품은 끊임없이 자고에서 일하는 것을 막을 수 있습니다. 그런 다음 이 항상이되도록하려면 Invalidate()를 호출해야합니다. 따라서 Windows는 새로운 페인트 이벤트를 생성하고 타이머 이벤트가 전달 될 수있는 상태로 결코 돌아 가지 않습니다.

수면 및 무효화 호출을 제거해야합니다. 대신 50 밀리 초 타이머를 사용하십시오. Tick ​​이벤트 핸들러에서 Invalidate()를 호출하기 만하면됩니다.

+0

으로 속도가 올라가고, 다른 폼 (form2)의 창을 클릭하고 이동하면 새로운 문제가 나타납니다. 애니메이션은 (form1)에서 속도가 올라가고 그 반대도 마찬가지입니다. – falcon2303

+0

Paint 이벤트 처리기를 고칠 때이 문제가 해결되었다고 믿습니다. 그렇지 않은 경우 새로운 질문을 시작하십시오. –

+0

좋아, 신속하고 유용한 답장을 보내 주셔서 감사합니다. – falcon2303