WPF 사용중에 여러 창을 시현하는 코드가 있습니다.
그리하여 전역변수의 Window 변수를 하나 가지고 있는 상태에서 초기 프로그램 구동시 Window를 생성하고 마지막 종료 시 Window 변수를 지우는 방법을 사용했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Window MyWin1; function Initialize() { MyWin1 = new Window(); } function myWindow_Close() { MyWin1.Hide(); } function myWindow_Show() { MyWin1.Show(); } function Window_Close() { MyWin1.Close(); MyWin1 = null; } | cs |
(함수 명들이 정확하지는 않습니다..)
그리해서 별 문제 없이 작동하는 중이였으나......
지역변수로 이용시 문제가 발생했습니다.
지역 변수는 Window_Close 시 Close 처리를 못해줌으로써 Memory에 계속 Window가 남아 버리는 문제점이 발생된거죠.....
그리하여 임시방편으로 지역변수 MyWin2를 생성 시에 Close 관련 함수를 넣어주었습니다. 그러니 별 문제 없이 해결되더군요..
근데 뭔가 난 간단하게 하려한건데 복잡하게 코드를 2번 작성해야 하니 뭔가 이건 잘못이 된거다 라고 생각해서 hide가 아닌 언제나 Close를 하고 다시 Window를 생성하여 보여주자라고 생각했는데.....
WPF는 한번 Close한 Window는 다시 Show를 할수없답니다..................허허.. 이게 왠.............
"창이 닫힌 후에는 Visibility를 설정하거나 Show, ShowDialog 또는 WindowInteropHelper.EnsureHandle을 호출할 수 없습니다." 라는 에러메시지 창을 표출해주시네요.......
MSDN을 찾아보니 원래 WPF가 그렇다고..................HIDE를 사용해서 작업하라고...................... 이게 왠.......HIDE에서 하다가 뭔가 안좋은거같아서 Close, Show하려고한건데............
그래서 결국 hide, show로 하고 있습니다.. ㅡㅡ;;;
지역변수의 경우 한번 더 코드를 추가해주는 부분도 있고.. 아니면 전역으로 빼서 작업할때도 있고.............
점점 막장이 되가는거같은 느낌.......
참조사이트 : http://forour.blog.me/30123588162, http://forour.blog.me/30124779840
참조사이트에서는 HIDE, SHOW를 이용하여 사용시 발생되는 부작용에 대해 말해주고, 거기에 따른 수정방법도 나와있음!