WPF中ListBox控件刷新问题

程序里有这么一段:privatevoidButton_Click(objectsender,RoutedEventArgse){box.Items.add("string... 程序里有这么一段:
private void Button_Click(object sender, RoutedEventArgs e)
{
box.Items.add("string A");

func();

box.Items.add("string B");

}
其中box是ListBox实例,func()是一个耗时操作(2秒左右)
我想要的效果是首先在ListBox中输出了string A,然后界面停住(因为去执行func()了),func()完毕后输出string B
但现在的现象是Button被按下后界面卡住,直到func()执行完后,string A和string B同时输出了
请问这个问题怎么解决
貌似winform里ListBox控件有个Refresh()方法可以刷新,wpf里有类似的东西么。。。
展开
 我来答
freeeeeewind
推荐于2017-11-26 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1291万
展开全部

WPF采用了与原来WinForm完全不同的刷新机制。在WPF中,只能通过Dispatcher.BeginInvoke方法来刷新UI元素

实现你要求的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfUIAsyncUpdate
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            box.Items.Add("String A");
            
            //启动一个线程
            Thread t = new Thread(LongWork);
            t.IsBackground = true;
            t.Start();
        }

        private void LongWork()
        {
            Thread.Sleep(8000); //模拟一个耗时的操作
            
            //向ListBox添加一个项 "String B"
            //由于LongWork运行在后台线程上
            //所以必须通过box.Dispatcher.BeginInvoke来刷新界面
            //这与WinForm中跨线程刷新控件有些类似
            box.Dispatcher.BeginInvoke(
                new Action(() => { box.Items.Add("String B"); }), 
                null);
        }
    }
}
Dara的世界
2014-10-11 · TA获得超过143个赞
知道小有建树答主
回答量:395
采纳率:100%
帮助的人:294万
展开全部
有的,Dispatcher.Invoke
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式