All Posts
7/31/2014 1:15:11 AM
Recently I am rewriting an old App using WinRT, I need to display a clock, but I find there is no Timer control.
It looks like I have to implement the Timer myself. I don't use Thread.Sleep because it will block UI thread. I prefer using async await over it. To replace Thread.Sleep, I use Task.Delay:
while (true)
{
// 要做的操作
await Task.Delay(毫秒);
}
为了增加逼格和可重用性,我们需要进一步封装。注意观察本高(
7/29/2014 2:51:38 AM
Windows Phone Runtime 8.1 (WinRT) 自带了DatePicker和TimePicker控件。妈妈再也不用担心我装WPToolkit了。但是和WPToolkit里面的两个Picker不同,WinRT的控件在MVVM模式里做data binding的时候是要爆的。 首先是DatePicker。 具体的情况表现为:ViewModel里的属性是DateTime类型,并且VM正确实现了INotifyPropertyChanged接口,前台直接用Binding语法绑定这个属性,但VM变化,界面不变。界面变化,VM不变。代码看起来就像是这样: Xaml: ViewModel: private DateTime _selectedDate; public DateTime SelectedDate { get { return _selectedDate; } …
7/21/2014 6:41:10 AM
上个月发布了一个WP8.1应用:NuGet Search,并在GitHub开了源:https://github.com/EdiWang/WP-NuGetSearch
NuGet的服务接口是个WCF OData Service,我尝试使用了跨Framework的PCI工程,结果no zuo no die了。和一般.NET类库不同,PCL有些tricky的地方要爆。下面是开荒成功的代码:
public async Task GetDataAsync(string searchTerm, int pageIndex, bool includePreRelease = false)
{
try
{
IDictionary queryOptions = new Dictionary {
{ "filter",
7/19/2014 12:48:07 AM
我的App《上海轨道交通》有个很坑的bug,按拼音首字母分组的站点列表会出现分组错误的情况,比如“莘庄”应该在X下,而WP的SortedLocaleGrouping居然把它分在了S下。这是因为“莘庄”的“莘”是多音字。同理,应该在C下的“长江南路”也到了“Z”下。类似的还有:
分组的代码用的是MSDN的范例改的:http://msdn.microsoft.com/library/windows/apps/jj244365(v=vs.105).aspx 这个范例对于英文来说是没问题的,中文就会出现多音字的问题。
为了解决这个坑爹问题,我写了个PinYinGroupResolver,用的时候可以写出很装逼的代码,比如这样:
GroupedStations = new PinYinGroupResolver(sGroup)
.For(s = …
7/18/2014 2:28:05 AM
在ASP.NET里运行定时任务,这是个老生常谈的话题了,撇开那些用per request搞定屌丝办法,目前最好的解决办法只有2种: 1. 如果你有大微软的Azure,可以直接在网站服务中找到Jobs,自己看一下就会了 2. 如果你是屌丝,买不起Azure,就用本文介绍的WebBackgrounder搞 由于ASP.NET是服务器端Web框架,所以一般而言,一个操作的往往是只有收到客户端Request之后才能执行的,如果网站一直没人访问,没有Request进来,如何执行代码呢?定时任务就是这种坑爹场景。 还好,大微软的MVC帝、ASP.NET小王子haacked蜀黍给我们写了个 http://www.nuget.org/packages/WebBackgrounder/ 专门捣鼓这种场景。作为一个屌丝程序猿,和大牛的区别就在于“好编程,不求甚解”。所以我们不必在意它是怎么实现的,只要会用就行 …
6/15/2014 1:34:14 AM
昨天教了大家如何使用Windows Azure PowerShell启动和关闭虚拟机,但光会用PS开关机还是不够的。如果你还在用网页版Portal创建和删除虚拟机,而只用PS去开关机,逼格明显就不完整了。所以今天再教大家如何用Windows Azure PowerShell创建和删除虚拟机,完成整个装逼过程。
首先,使用Windows Azure PowerShell登录Azure账户的步骤不再重复了,上一篇文章里有。假定你已经登录了。
如果你想查看虚拟机列表命令是:
Get-AzureVM
1. 要创建虚拟机需要获得一些前置信息。第一个是你的订阅名称。运行这条命令获得:
Get-AzureSubscription
在我的例子中,结果是Windows Azure MSDN - Visual Studio Ultimate。这是一个一年价值12w的订阅,大家不要在意这些细 …
6/14/2014 2:30:40 AM
我们在使用Azure的时候,如果只会用网页版portal操作是没有逼格的。如果你不在命令行里啪啪啪的敲点东西,就会被鄙视,他们会说用微软产品的人只会用图形界面,微软的程序员只会拖控件。为了挽回我们的逼格,微软提供了Windows Azure PowerShell,能够让我们以命令行方式操作Azure。今天就教大家如何用Windows Azure PowerShell启动和关闭你的虚拟机。如果你没安装Windows Azure PowerShell,可以通过大微软的Web Platform Installer安装,本文不再啰嗦怎么安装,反正WPI都是一键搞定的。 启动Windows Azure PowerShell后,第一件事就是要登录你的Azure账户。键入以下命令后会弹出登录界面: Add-AzureAccount 登录完成后,
5/7/2014 1:57:21 AM
自从有了.NET 4.5,我们又多了一个装逼语法:async,await。但如果错用就会装逼不成反变傻逼。首先我们得明白在ASP.NET中async await所针对的问题,这样才能正确的装逼。于是我们就不得不先研究一下线程池。 在IIS服务器上,处理Http请求的是线程,和Windows的其他软件一样,干活的永远是线程,而不应该说是进程。一个线程同时只能处理一个request,而web上的request不可能同时永远只有一个,所以线程需要和他的小伙伴们一起组成线程池,才能保证网站的响应。当一个线程处理完了手头的请求,它就被释放掉了,于是如果再有新的请求进来他就能再去处理。但如果当线程用完了,并且他们正在处理的请求都没完成,网站就卡住了,用户就只能等出翔。这时候IIS就会返回一个HTTP 503爆给用户。 打个比方,IIS服务器就好像银行,Http请求就好像顾客,银行开的窗口数量就是进程池 …
4/27/2014 2:44:18 AM
本文针对.NET初学者介绍LINQ TO XML,你会看见很多为了通俗易懂而故意描述得不专业的语句,所以高手勿入!本文介绍的方法不只针对WP,其他任何.NET项目也可以参考。 我在Windows Phone平台上发布的《上海轨道交通》使用的是离线XML作为数据存储。好处是不需要安装任何三方库,.NET自己就有能力解析。如果用JSON装逼还得下载JSON.NET呢。又因为都是只读数据,也用不着为了装逼而用SQL Lite或SQL CE什么的数据库杀鸡用牛刀。 下面介绍一下如何在工程里内嵌XML文件并解析到对象的一般方法。 《上海轨道交通》的XML文件保存的是所有的站点信息,单个节点看起来就像这样: 由此可见,一个站点包括了多个 …
3/28/2014 1:34:16 AM
我是一个疯狂的软粉,也是微软产品十几年的老用户,2012年毕业参加工作之后接触到了许多微软的前沿技术,对微软产品更加爱不释手。在用Windows Phone以前,我用的是一款中端的Android手机,Android系统虽然软件丰富多样,但它非常耗电,系统也经常卡得受不了,还中过两次毒,于是忍无可忍之下我换了一部诺基亚720,终于凑齐了微软的三个代表:Surface,Office和Windows Phone。 其实我的主要工作是开发ASP.NET网站,自己的博客也是一路走来从WebForm 2.0维护到现在的MVC 5.1,然而相比ASP.NET开发,WP让我感觉更贴近普通用户。开发免费、无广告、注重界面和交互的WP应用成为了我的副业。 先前我并没有做过真正意义上的客户端软件,对WP开发充满新鲜感。由于之前的工作中有少许Silverlight和WPF的经验,所以今年年初我看着Channel9 …
Theme