读书人

wpf使用多线程后界面一样无响应解决办

发布时间: 2012-05-20 16:03:12 作者: rapoo

wpf使用多线程后界面一样无响应
这个问题跟winform里的多线程界面卡是同一个问题,但是不能使用winform下的办法来解决。

先看代码

C# code
<Window x:Class="WpfApplication1.Window1"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    Title="Window1" Height="300" Width="300">    <Grid>        <Button Height="23" Margin="95,0,108,45" Name="button1" VerticalAlignment="Bottom" Click="button1_Click">Button</Button>        <TextBlock Margin="38,40,19,88" Name="textBlock1" />    </Grid></Window>


C# code
    public partial class Window1 : Window    {        private delegate void DeleDoWork();        public Window1()        {            InitializeComponent();        }        private void button1_Click(object sender, RoutedEventArgs e)        {            DeleDoWork work = new DeleDoWork(DoWork);            Dispatcher.BeginInvoke(work);        }        private void DoWork()        {            for (int i = 0; i < 100; i++)            {                textBlock1.Text = i.ToString();                Thread.Sleep(200);            }        }    }


当单击按钮后,窗口就无响应了。

请问有什么办法可以解决?

[解决办法]
探讨
引用:
DoWork()里加入Application.DoEvents()就可以了。


感谢您的回复!

你说的方法其实我早就看到了,它在winform和主帖里循环的情况下是有用的,但如果调用的方法不是循环耗时,而是调用其它方法耗时,它就不能用,所以我在主帖里说“不能使用winform下的办法来解决”就是这个意思,我给出另外一段更合理的代码,见如下……

读书人网 >C#

热点推荐