日期:2014-05-18  浏览次数:21062 次

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下的办法来解决”就是这个意思,我给出另外一段更合理的代码,见如下……