彩票走势图

WPF下多线程操作窗口UI控件的处理方式

转帖|其它|编辑:郝浩|2010-12-17 13:23:53.000|阅读 3801 次

概述:wpf下的多线程操作窗口UI控件的过程和winform基本上一直,也是A线程中不能操作其他线程和主线程的控件,必须通过其他方式来处理。在winform过程是使用委托方式来处理。wpf其实也是一样的。但是wpf提供了一个更简单方式。本文主要介绍wpf下多线程操作窗口UI控件的处理方式,希望对大家有帮助。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  wpf下的多线程操作窗口UI控件的过程和winform基本上一直,也是A线程中不能操作其他线程和主线程的控件,必须通过其他方式来处理。在winform过程是使用委托方式来处理。wpf其实也是一样的。但是wpf提供了一个更简单方式

  可以先参考winform中处理过程 c#多线程操作Windows Forms控件

  wpf中提供了全新的Dispatcher类。可以使用this.Dispatcher.BeginInvoke()或者控件.Dispatcher.BeginInvoke()这个方式和winform2.0是比较类似的。

  举个例子wpf窗口点击一个按钮去执行一个长时间的运算,运算的中间结果显示在文本框中。

这是UI代码

<StackPanel Orientation="Horizontal" VerticalAlignment="Center" >
        <Button Content="Start"  
            Click="startStopButton_Click"
            Name="startStopButton"
    &nbsp;       Margin="5,0,5,0"

 />
        <TextBlock Margin="10,5,0,0">Biggest Prime Found:</TextBlock>
        <TextBlock Name="bigPrime" Margin="4,5,0,0">3</TextBlock>
    </StackPanel>

后台主要代码这样

public delegate void NextPrimeDelegate();//定义委托
public void CheckNextNumber()//执行这个算法,并且更新文本框内容
{.................
}

private void startStopButton_Click(object sender, RoutedEventArgs e)
 {
 startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal,new NextPrimeDelegate(CheckNextNumber));
}

这就是主要步骤和代码。

  也可以完全使用winform2.0中的方法

  1。开启新线程

  2。定义委托

  3.定义委托执行方法,在里面修改控件。主要代码this.Dispatcher.BeginInvoke

  wpf中多窗口线程处理

  描述如下

  在主窗口中打开一个线程,这个线程去启动一个新的窗口。

  代码如下

启动新线程:

Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint));
            newWindowThread.SetApartmentState(ApartmentState.STA);
            newWindowThread.IsBackground = true;
            newWindowThread.Start();

//线程调用方法
 private void ThreadStartingPoint()
        {
            Window3 tempWindow = new Window3();
            tempWindow.Show();
            System.Windows.Threading.Dispatcher.Run();
   &nbsp;    }

这里面有两个地方要注意:

  第一个红字:这个地方必须设置这个STA,否则会报错“调用线程必须为 STA,因为许多 UI 组件都需要。”

  第二个红字:如果去掉这个红字,会发现启动的窗口显示出来以后会很快就关掉。

  这里有个奇怪的现象。我也不是很明白,msdn描述如下:说是启动一个新的独立线程来管理这个新的窗口。

  一些 WPF 应用程序需要多个高级别窗口。一个线程/Dispatcher 组合管理多个窗口是完全可以接受的,但有时使用多个线程可以更出色地完成工作。如果其中一个窗口有可能独占该线程,那么采用多个线程就更有必要。

  当用户单击“new window”(新建窗口)按钮时,便在一个单独的线程中启动了窗口的一个副本。这样,一个窗口中的长时间运行或阻止操作就不会锁定所有其他窗口。

  新线程的起点。我们在此线程的控制下创建一个新窗口。WPF 自动创建一个新的 Dispatcher 来管理新线程。要使该窗口工作,只需启动 Dispatcher。


 


 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP