본문 바로가기

WPF 개발 ( C# )

WPF 화면변경사항 즉시 업데이트 하는 방법


1) 함수를 하나 생성한다

public void UpdateWindow()

{

// 화면 객체의 변경사항을 즉시 업데이트한다

      System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(

                System.Windows.Threading.DispatcherPriority.Background,

                new System.Threading.ThreadStart(delegate { }));

}


2) 프로그램상에서 필요할 때 호출한다


<참조1>

lcCollect.Items.Insert(0, "'WebCache' 문자열이 포함된 프로세스 표시");

UpdateWindow();


<참조2>

CrawlDll.ProcessControl(ref ps);

if (ps.nErrorCode != 0)

MessageBox.Show(ps.nErrorCode.ToString() + ps.szMag);


<설명>


lcCollect 는 WPF의 ItemsControl 컨트롤이다


<참조1> 에서 UpdateWindow(); 함수를 호출하지 않고 <참조2>를 실행하면

<참조2> 에 포함한 아래의 모든 명령이 수행되고 함수가 종료 되어야
 화면의 lcCollect 에  추가된 문자열이 표시된다

그러나 위처럼 UpdateWindow() 함수를 호출하면 <참조2>를 실행하기 전에 화면의 lcCollect 에  추가된 문자열이 표시된다


UpdateWindow() 함수는 내부적으로 별도의 쓰레드를 생성해서 화면갱신처리를 내부적으로 한 후 리턴된다


추가사항.


lcCollect 가 포함된 xaml  소스를 아래에 추가하니 참조한다

----- 아 래 ----------

<Grid Grid.Row="2" Margin="5">

<Rectangle Stroke="Black">

</Rectangle>

<ScrollViewer VerticalScrollBarVisibility="Auto">

<ItemsControl Name="lcSummary"/>

</ScrollViewer>

</Grid>

----------------------------------------