当前位置: 首页 > news >正文

网站建设费用如何做账做民宿加盟哪些网站比较好

网站建设费用如何做账,做民宿加盟哪些网站比较好,怎么免费建立网站做推广,拿网站的文章做外链WPF多线程UI更新——两种方法 前言 在WPF中#xff0c;在使用多线程在后台进行计算限制的异步操作的时候#xff0c;如果在后台线程中对UI进行了修改#xff0c;则会出现一个错误#xff1a;#xff08;调用线程无法访问此对象#xff0c;因为另一个线程拥有该对象。在使用多线程在后台进行计算限制的异步操作的时候如果在后台线程中对UI进行了修改则会出现一个错误调用线程无法访问此对象因为另一个线程拥有该对象。这是很常见的一个错误一不小心就会有这个现象。在WPF中如果不是用多线程的话例如单线程应用程序就是说代码一路过去都在GUI线程运行可以随意更新任何东西包括UI对象。但是使用多线程来更新UI就可能会出现以上所说问题怎么解决本文章提供两个方法Dispatcher大部分人使用,TaskScheduler任务调度器。   问题再现   可能有的WPF新手不懂这是什么情况先来个问题的再现再使用本文章的两个方法进行解决。   为了演示方便我使用了最简单的布局一个开始按钮三个TextBlock。按一下开始按钮开一个后台线程随机得到一个数字并且更新第一个TextBlock。再开另外一个后台线程得到另外一个数字更新第二个TextBlock。第三个TextBlock处理同理。   XAML代码 Window x:ClassUpdateUIDemo.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlTitleMainWindow Height130 Width363CanvasTextBlock Width40 Canvas.Left38 Canvas.Top27 Height29 x:Namefirst BackgroundBlack ForegroundWhite/TextBlockTextBlock Width40 Canvas.Left128 Canvas.Top27 Height29 x:Namesecond BackgroundBlack ForegroundWhite/TextBlockTextBlock Width40 Canvas.Left211 Canvas.Top27 Height29 x:NameThree BackgroundBlack ForegroundWhite/TextBlockButton Height21 Width50 Canvas.Left271 Canvas.Top58 Content开始 ClickButton_Click/Button/Canvas /Window   后台代码 public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void Button_Click(object sender, RoutedEventArgs e){Task.Factory.StartNew(Work);}private void Work(){Task task new Task((tb) Begin(this.first), this.first);Task task2 new Task((tb) Begin(this.second), this.first);Task task3 new Task((tb) Begin(this.Three), this.first);task.Start();task.Wait();task2.Start();task2.Wait();task3.Start();}private void Begin(TextBlock tb){int i100000000;while (i0){i--;}Random random new Random();String Num random.Next(0, 100).ToString();tb.Text Num;}}     运行一下在点击开始按钮的时候得到了一个错误信息   果然不出所料Begin函数是在后台线程执行的tb这个TextBlock是前台UI线程的对象所以无法在后台线程改变UI线程拥有的对象很多有点经验的WPF程序员就会使用下面我要说的Dispatcher了   问题解决   方法一Dispatcher     1.把UI更新的代码放到一个函数中 private void UpdateTb(TextBlock tb, string text){tb.Text text;}     2.使用Dispatcher,大家看修改后的Begin函数(红色内容) private void Begin(TextBlock tb){int i100000000;while (i0){i--;}Random random new Random();String Num random.Next(0, 100).ToString();ActionTextBlock, String updateAction new ActionTextBlock, string(UpdateTb);tb.Dispatcher.BeginInvoke(updateAction,tb,Num);}   再运行一次程序可以看到能正常显示了并且不会出现假死现象。   方法二任务调度器(TaskScheduler)     有很多任务调度器在CLR Var C#中就提出了线程池任务调度器I/O任务调度器任务限时调度器等调度器的职责就是负责任务的调度调节任务执行。同步上下文任务调度器就是该方法二所使用的调度器其作用是将所有任务都调度给应用程序的GUI线程。 public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private readonly TaskScheduler _syncContextTaskScheduler TaskScheduler.FromCurrentSynchronizationContext();private void Button_Click(object sender, RoutedEventArgs e){Task.Factory.StartNew(SchedulerWork);}private void SchedulerWork(){Task.Factory.StartNew(Begin, this.first).Wait();Task.Factory.StartNew(Begin, this.second).Wait();Task.Factory.StartNew(Begin, this.Three).Wait();}private void Begin(object obj){TextBlock tb obj as TextBlock;int i 100000000;while (i0){i--;}Random random new Random();String Num random.Next(0,100).ToString();Task.Factory.StartNew(() UpdateTb(tb, Num),new CancellationTokenSource().Token, TaskCreationOptions.None, _syncContextTaskScheduler).Wait();}private void UpdateTb(TextBlock tb, string text){tb.Text text;}}      结果展示      总结   任务调度器还有很多种按照自己喜欢的方法来实现后台多线程更新UI。还有任务调度器也可以应用到Winform中。下面提供示例Demo下载。                                    完整Demo下载 转载于:https://www.cnblogs.com/Jarvin/p/3756061.html
http://www.yutouwan.com/news/96236/

相关文章:

  • 做网站单线程CPU和多线程cpu响应式网站建设新闻
  • 建设一个好的网站服务器安装完面板怎么做网站
  • 网站建设列入管理费用说明科目找装修公司上哪个平台
  • 建设通网站有建筑公司名录大全怎么调查建设网站
  • No酒类网站建设微官网怎么开通使用
  • 业务网站在线生成电子商务书城网站建设方案
  • 电子线路板东莞网站建设百度广告联盟赚广告费
  • 自动做reference的网站网站建设设计ppt
  • 如何做h5 网站邢台做移动网站多少钱
  • 网站开发销售建设模板网站报价
  • 某企业集团网站建设方案论文网站推广的效果好
  • 国内个人网站设计欣赏网站的毕业设计怎么做
  • 郑州网站建设网站百度收录提交入口网址
  • 做影视剧组演员垂直平台网站flash可以做网站吗
  • 手机网站建设电话网站备案管局电话
  • 装修公司怎么做免费网站设计网站要多久
  • 建站快车帮助建立个人博客wordpress
  • 模板网站首页设计微信的微网站模板下载不了
  • 机票什么网站建设关于网页制作的论文
  • 老版本网站开发工具钓鱼网站怎么做的
  • 电子商务网站开发语言海宁市建设局官方网站6
  • 做期货看什么网站的资讯郑州新闻头条最新消息
  • 鞍山网站哪家好网站白名单查询
  • 我想做自己网站怎么做哈尔滨网络推广经理招聘
  • 野外美食网站设计欣赏凡科网站是什么做的
  • 网站开发组做ppt找图片的网站
  • 在线网站建设培训263官网首页
  • wordpress子目录站点wordpress安装主题出错
  • 河南省住房建设厅官方网站制作网站建设入门
  • wordpress本地上传视频资料企业网站优化方案