在WPF的用户线程中更新UI界面 .

WPFUI线程队列由Dispatcher来管理和调度,所以当用户线程中更新UI时,必须通过Dispatche来调度,下面这个小例子将给用户展示如何在用户线程中更新当前的时间.
 
前台的XAML代码如下:
<Windowx:Class="ThreadInvoke.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ThreadInvoke"Height="300"Width="300"
    >
 <StackPanelOrientation="Vertical">
    <StackPanelOrientation="Horizontal">
      <ButtonContent="Ok"Click="okClick"Width="50"/>
      <ButtonContent="Stop"Click="stopClick"Width="50"/>
    </StackPanel>
    <TextBoxName="timeText"></TextBox>
 </StackPanel>
</Window>
 
后台的主要代码如下:
 
//申明一个代理用于想UI更新时间
private delegate void DelegateSetCurrentTime();
 
//申明一个变量,用于停止时间的跳动
private bool stopFlag = false;
 
//处理开始和结束事件
private void okClick(object sender,RoutedEventArgs args)
        {
            stopFlag = false;
            Thread thread = new Thread(new ThreadStart(refreshTime));
            thread.Start();
        }
 
 private void stopClick(object sender, RoutedEventArgs args)
        {
            stopFlag = true;
        }
 
//用户线程的实现函数
 private void refreshTime()
        {
            while (!stopFlag)
            {
//向UI界面更新时钟显示                Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.SystemIdle, new DelegateSetCurrentTime(setCurrentTime));
            }
        }
 
 private void setCurrentTime()
        {
            String currentTime = System.DateTime.Now.ToString();
            timeText.Text = currentTime;
        }
posted @ 2011-08-16 18:10  therockthe  阅读(1631)  评论(0)    收藏  举报