WPF Window Show, Hide, Close

2014. 7. 7. 14:44·사소한 아이의 소소한 스킬/C#
반응형

WPF 사용중에 여러 창을 시현하는 코드가 있습니다. 


 이전에 Scaleform 사용시에는 UI들이 자주자주사용되는것도 있고.. 제 개인적인 생각으로 사용할때마다 생성하고 지우는거보단 처음에 한번 생성하고 계속 사용하다가 마지막 프로그램 종료시에만 지우는게 맞다고 생각했죠... 

그리하여 전역변수의 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를 이용하여 사용시 발생되는 부작용에 대해 말해주고, 거기에 따른 수정방법도 나와있음!


[출처] WPF에서 닫힌 window 다시 사용하기 - 1편 [window 닫기 대신 감추기]|작성자 나그네



반응형
저작자표시 비영리 변경금지 (새창열림)
'사소한 아이의 소소한 스킬/C#' 카테고리의 다른 글
  • WPF의 Cross Thread BeginInvoke 방법
  • WPF의 Cross Thread 문제
  • 여러 생성자를 만들때 팁.
  • 원하는 달의 일수 찾기
JOOJI
JOOJI
그냥 혼자좋아하는 것들 남기는 블로그....
  • JOOJI
    사소한프로그래머의 소소한행복
    JOOJI
  • 전체
    오늘
    어제
    • 분류 전체보기 (952) N
      • 사소한 아이의 소소한 일상 (245)
      • 사소한 아이의 소소한 먹거리 (43)
      • 사소한 아이의 소소한 정보 (75)
      • 사소한 아이의 소소한 감사 (4)
      • 사소한 아이의 소소한 운동 (54) N
      • 사소한 아이의 소소한 여행 (40)
        • 2013_전주 (1)
        • 2014_독일 (13)
        • 2014_군산 (1)
        • 2015_제주도 (3)
        • 2015_서울모토쇼 (3)
        • 2015_진해 (1)
        • 2015_전주 (1)
        • 2016_여수 (1)
        • 2020_강릉 (1)
        • 2022_제주도 (4)
      • 사소한 아이의 소소한 강짱 (22)
        • 하트투하트 (10)
        • MAPS (1)
        • 화려한 유혹 (2)
        • 한여름의 추억 (2)
      • 사소한 아이의 TV (50)
        • Drama (9)
        • 예능 (32)
        • 사소한 아이의 다현 (9)
      • 사소한 아이의 소소한 스킬 (130)
        • Scaleform (2)
        • C# (74)
        • QT (3)
        • 알고리즘 (4)
        • Python (21)
        • PyQT5 (9)
        • C_C++ (2)
      • 사소한 아이의 소소한 축구 (283)
        • Korea (25)
        • Germany (45)
        • Bayern Munich (64)
        • Soccer_ETC (75)
        • Euro 2016 (12)
        • 친선경기 (3)
      • 사소한 아이의 소소한 생활정보 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
    • 관리
  • 링크

    • 독일여행
    • 레바티스토리
    • 프라치노 공간
    • 남성패션꿀템 블로그
  • 공지사항

  • 인기 글

  • 태그

    뮌헨
    python
    c#
    문제
    독일
    WPF
    바이에른 뮌헨
    회사밥
    러닝
    분데스리가
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JOOJI
WPF Window Show, Hide, Close
상단으로

티스토리툴바