WPF - 忙时弹出加载窗口

时间:2017-08-02 13:57:19

标签: c# wpf multithreading

我必须在一个没有深思熟虑的应用程序上显示一个窗口。来自每个窗口的调用都来自同一个线程,没有后台工作者。该应用程序相当yuge,所以我不能只是实现BW模式。问题是,其中一些操作需要一段时间(大约5-10秒),整个应用程序在等待时会变为无响应。

我的想法是在后台线程上实现某种看门狗,只要我设置一个标志(App.Loading)就会弹出一个窗口,以便让用户知道某些事情正在发生。

为了做到这一点,我把它放在主菜单中

        public Menu()
        {
            ShowInTaskbar = true;
            InitializeComponent();
            Debug.Ventana = "Menu";
            App.Menu = this;

            Loading = new Thread(new ThreadStart(CheckLoading));
            Loading.SetApartmentState(ApartmentState.STA);
            Loading.Start();
        }

        private void CheckLoading()
        {
            Loading load = new Andrei.Loading("Cargando datos")
            {
                ShowInTaskbar = false,
                Topmost = true
            };
            while(true)
            {
                if (App.Loading && !load.IsVisible)
                    load.Show();
                if (!App.Loading && load.IsVisible)
                    load.Hide();
            }
        }

问题是,有时窗口没有出现,当它出现时,动画不起作用(这是一个带有字符串和不确定进度条的小窗口),这必须是因为主线程被冻结了一会儿(真实)。我已经尝试将循环放在另一个线程中,但我无法从另一个线程访问该窗口来隐藏和显示它。我已经尝试在窗口上放置一个BW来检查进度,但当然,在完成第一个循环之后,它不再寻找标志了。

除了完全重新设计应用程序以将BW用于任何和所有时间进程之外的任何其他建议吗?

0 个答案:

没有答案