很是不能原谅自己这个冬天的随意和懒惰,曾经坚持写日志的习惯就这么恍然间就那么戛然而止。又是岁末年初的时候,记得2011年是多么翘首以待的时刻,如今已到年末了。真的不知道2011年这一年会在我的生命中留下什么,回头望去,好像自己都是那么一路蹒跚的走过一年,真的好像是一无所获。.......
总感觉自己所学习的零零散散的,我也没有那种毅力和习惯坚持去写技术日志。但是经常会看一些技术日志却觉得人家写的很好,很多时候都是对自己的技术难题有些启示。当然写技术日志也是梳理自己思路的问题,当然记忆和理解都会深刻一些。唉2011年就这么结束了,应该在2012年有个新的状态。以后尽量多写些技术日志,来记录自己学习的历程。
--------------------------------------------------转载------------------------------------------
Silverlight中 非UI线程更新UI 的几种方法:Delegate,Asyncoperation,BackgroundWorker
首先列一下基础代码:
首先列一下基础代码:
- <UserControl
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d"
- x:Class="Shareach.TestUI.UCThreadUpdate"
- d:DesignWidth="250" d:DesignHeight="120">
- <StackPanel>
- <TextBlock x:Name="txtCalc" />
- </StackPanel>
- </UserControl>
- using System;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Documents;
- using System.Windows.Ink;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Animation;
- using System.Windows.Shapes;
- using System.Threading;
- namespace Shareach.TestUI
- {
- public partial class UCThreadUpdate: UserControl
- {
- public UCMsgSend()
- {
- InitializeComponent();
- ThreadUpdate();
- }
- void ThreadUpdate()
- {
- Thread thread = new Thread(new ThreadStart(DoWork));
- thread.Start();
- }
- void DoWork()
- {
- int i=0;
- while(i<100){
- DoShow(i);
- }
- }
- }
- }
- DoShow的三种写法
- 1. delegate
- void DoShow(i){
- this.dispatcher.BeginInvoke(
- delegate {
- txtCalc.Text = string.format(“result “{0}”,i);
- });
- }
- 2.Asyncoperation
- void DoShow(i){
- //这个可以写成成员变量,我这里只是为了好区分
- System.ComponentModel.Asyncoperation asyncoper = System.ComponentModel.AsyncoperationManager.CreateOperation(null);
- asyncoper.Post(result =>
- {
- txtCalc.Text = string.format(“result “{0}”,i);
- }, null);
- }
- 3.BackgroundWorker
- 参考MSDN上的文章的
- Winform 也一样,
--------------------------------------------------转载------------------------------------------ 以前所做的都是在地图上临时创建一个Graphicslayer图层,当然只添加很少的Graphicslayer(MapPoint、Line、polygon),当然涉及不到性能的问题。一般情况下不超过5000个Graphic是没有什么问题的,起码操作地图的时候感觉不到慢。可是已超过5000个,就会明显感觉很慢,甚至出现假死的现象。由于好多都是封装好的,我们没有办法去修改,所以要解决此类问题就必须换种思路。由于ArcGIS在GIS行业做的是属于比较成熟的,所以相关的问题都有解决问题,只是我们自己熟练程度的问题。对于这个假死的问题,查了很多资料解决方案有一下几种:
在服务器端进行点抽希是根本解决办法。两个方法可以进行点抽希:
1、从服务器端拿到图形后,自己在用geometry service的generalize方法抽希;
2、如果是gp服务,在服务器端对结果用generalize工具进行抽希;
另外,可考虑将此graphic放在单独线程里添加到graphicslayer上去,不至于阻塞ui线程。
1、从服务器端拿到图形后,自己在用geometry service的generalize方法抽希;
2、如果是gp服务,在服务器端对结果用generalize工具进行抽希;
另外,可考虑将此graphic放在单独线程里添加到graphicslayer上去,不至于阻塞ui线程。
类似这类问题能在服务端就在服务端,不然真的很慢。上面的两种我尽管知道抽希的大概意思,但是真的不知道怎么去操作,之后用的是第三种,感觉没有假死,但是还不是很快,再想想还有没有其他的方式,还考虑在服务端GP生成结果返回一张图片 不过未实现过。
不过今天看到一个非GIS人写的项目总结,可以考虑将那些点数据生成XAML文件,之后通过Silverlight去解析。这样性能或许会快一些。但是他说的是在Canvas上画图,我想想能不能生成shp文件,之后根据shp文件创建一个图层去显示,这样才符合GIS 的空间思维,不然感觉有些别扭,还有一种是通过GP生成栅格数据,在客户端叠加。思路上应该没有什么问题,可行。
先记下这些问题,之后完善。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。