<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_jjx</title><subtitle type="text">jjx</subtitle><id>http://feed.cnblogs.com/blog/u/28123/rss</id><updated>2010-11-30T01:06:54Z</updated><author><name>jjx</name><uri>http://www.cnblogs.com/jjx/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jjx/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/28123/rss"/><entry><id>http://www.cnblogs.com/jjx/archive/2010/10/31/1865485.html</id><title type="text">关于silverlight 前景的讨论，不吐不快</title><summary type="text">首先，且不讨论这个事件的本身，最近以来，我一直对ms感到失望，这是因为ms在开发技术的延续性上越来越随心所欲，当然，早期的开发者可能也经历过dao,dao direct,rdo,ado的时代，但那时的api 相对很小，学习坡度很小。而现在，自从.net 推出后 windows forms不更新了,wf 更新换代了，linq to sql 也死了，dlr也不管了。问题是这些替代者完全能胜任了吗？没有...</summary><published>2010-10-31T01:18:00Z</published><updated>2010-10-31T01:18:00Z</updated><author><name>jjx</name><uri>http://www.cnblogs.com/jjx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jjx/archive/2010/10/31/1865485.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jjx/archive/2010/10/31/1865485.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 首先，且不讨论这个事件的本身，最近以来，我一直对ms感到失望，这是因为ms在开发技术的延续性上越来越随心所欲，当然，早期的开发者可能也经历过dao,dao direct,rdo,ado的时代，但那时的api 相对很小，学习坡度很小。而现在，自从.net 推出后 windows forms不更新了,wf 更新换代了，linq to sql 也死了，dlr也不管了。问题是这些替代者完全能胜任了吗？没有！！！！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 好吧，现在就讨论silverlight ,或许这个人说的本身就没有错误，silverlight 本身就不能完全的跨所有的平台，虽然它现在能在部分osx和windows 运行，但远远不是真正的跨平台。只有html5 才能真正的跨平台。但是，无论如何，silverlight现在是作为wp7的主要开发技术之一，而wp7&amp;nbsp;却是你们目前要主推的东西。你完全可以这样说，silverlight 对我们还是很重要，作为wp7的主要开发技术，我们将继续发展silverlight&amp;nbsp;。但是没有， 从这些言论来看，个人觉得ms 目前派系斗争真的是厉害。就怕遇见猪一样的队友，肯定是没错的。我对ms的前景现在完全不抱乐观的态度，不在于ms有没有能力，而是现在他们这个内耗，实在是太匪夷所思了。&amp;nbsp;&amp;nbsp;资源的争取不是靠打垮内部的另一个团队来得到的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 好了，现在这个言论，肯定会影响一批人使用silverlight了，包括我，因为silverlight 虽然有很好的开发模式，但是，它现在存在的大量的问题，无论是性能或是bug上，没有一个好的将来保证，真的不敢用。 这样的结果，估计ms很满意了，问题是，如果使用html5 ,你能把用户绑定到你的平台吗？使用websocket,json,服务器端无论是java/python/ruby ,哪个都不比你的弱！你有这个信心吗？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;附带一下我的一段评论，可能更容易表达我的观点：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 微软雅黑; font-size: 12px; line-height: 18px; "&gt;个人以为，这个ms的发言者犯了一个不必要的错误，没有必要讨论silverlight的跨平台，因为无论.net或是silverlight的clr，都没有真正的跨平台。其次是作为wp7的主要开发技术，他有可能不发展吗？这样的话你们推广wp7的后劲在哪里呢？&lt;br /&gt;他的言论，造成不必要的恐慌。&lt;br /&gt;&lt;br /&gt;其次，silverlight我认为对ms很重要，因为这是有效的平台的绑定工具，而html5 ，我觉的开发这里完全可以选择更强有力的服务器技术，如java/ruby/python之类的。而且html5浏览器技术竞争激励，其他厂商比ms有更快的应变和发布手段，更好的口碑。ms不会讨好。&lt;br /&gt;&lt;br /&gt;所以，其实两者都很重要，但是如果ms内部真的要扬html,遏制silverlight话，真是个吃屎的决定&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jjx/aggbug/1865485.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jjx/archive/2010/10/31/1865485.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jjx/archive/2010/10/30/1864978.html</id><title type="text">没有说说新的async ctp吗？</title><summary type="text">昨天下午看俺的神的视频，同声中文说的是一团雾水，前面讲的是async以及避免ui冻结的问题。后来下载了async ctp,大致看了一下，发现多了两个关键字async/await ,看样子又是语法糖，但这个语法糖非常的有用，代码一下子清晰许多了。</summary><published>2010-10-30T02:42:00Z</published><updated>2010-10-30T02:42:00Z</updated><author><name>jjx</name><uri>http://www.cnblogs.com/jjx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jjx/archive/2010/10/30/1864978.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jjx/archive/2010/10/30/1864978.html"/><content type="html">&lt;p&gt;昨天下午看俺的神的视频，同声中文说的是一团雾水，前面讲的是async以及避免ui冻结的问题。后来下载的async ctp,大致看了一下，多了两个关键字async/await ,看样子又是语法糖，但这个语法糖非常的有用，代码一下子清晰许多了。举个例子，将一个需要长时间执行任务的结果显示在一个文本框中，如下&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;有一个任务需要10秒才能完成&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;getTotalBytes()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Thread.Sleep(&lt;/span&gt;&lt;span style="color: #800080;"&gt;10000&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;1000&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;传统的同步方法&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000;"&gt;textBox1.Text&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;getTotalBytes();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;在这10秒间，ui会被冻结，ui不会有响应，通常这是我们要避免的&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;有多种方法解决这个问题，线程，异步（异步实际上也是利用了线程池)或者是.net 4中的Task(其实也是线程包装）,并且要考虑其他线程调用主线程ui上的问题(win forms 依赖ISynchronizeInvoke机制)&lt;/p&gt;&lt;p&gt;1. 用线程&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('19a24874-434c-4b2a-aae1-963aa9df9352')"&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed" id="code_img_closed_19a24874-434c-4b2a-aae1-963aa9df9352" style="display:none" alt="" /&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" id="code_img_opened_19a24874-434c-4b2a-aae1-963aa9df9352" onclick="cnblogs_code_hide('19a24874-434c-4b2a-aae1-963aa9df9352',event)"&gt;&lt;div id="cnblogs_code_open_19a24874-434c-4b2a-aae1-963aa9df9352"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;Thread&amp;nbsp;t&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Thread(()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;result&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;getTotalBytes();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Invoke(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Action(()&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textBox1.Text&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;result.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.Start();&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2. 异步回调&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;异步方法主要借助于deletage &amp;nbsp;的BeginInvoke和EndInvoke,看起来代码更加复杂些&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('055c5565-9b13-40f5-bb47-88fd2d8332bf')"&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed" id="code_img_closed_055c5565-9b13-40f5-bb47-88fd2d8332bf" style="display:none" alt="" /&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" id="code_img_opened_055c5565-9b13-40f5-bb47-88fd2d8332bf" onclick="cnblogs_code_hide('055c5565-9b13-40f5-bb47-88fd2d8332bf',event)"&gt;&lt;div id="cnblogs_code_open_055c5565-9b13-40f5-bb47-88fd2d8332bf"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;Func&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;getTotalBytes;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.BeginInvoke(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;AsyncCallback((arg)&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AsyncResult&amp;nbsp;_result&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(AsyncResult)arg;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Func&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;_t&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;(Func&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;_result.AsyncDelegate;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;_s&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;_t.EndInvoke(arg).ToString();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Invoke(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Action(()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&amp;nbsp;textBox1.Text&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;_s;&amp;nbsp;}));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}),&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3. windows forms 中提供了一个backgroundWorker,从某种程度上简化异步方法的调用，他提供DoWork和RunWorkerCompleted两个事件，一个用来执行任务，一个用来做执行结果的处理，他能自动处理不同线程上调用主线程中ui组件的问题&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('d844236c-33fc-478c-8484-7db34520221a')"&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed" id="code_img_closed_d844236c-33fc-478c-8484-7db34520221a" style="display:none" alt="" /&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" id="code_img_opened_d844236c-33fc-478c-8484-7db34520221a" onclick="cnblogs_code_hide('d844236c-33fc-478c-8484-7db34520221a',event)"&gt;&lt;div id="cnblogs_code_open_d844236c-33fc-478c-8484-7db34520221a"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BackgroundWorker&amp;nbsp;worker&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;BackgroundWorker();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;worker.DoWork&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(sender1,&amp;nbsp;e1)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e1.Result&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;getTotalBytes();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;worker.RunWorkerCompleted&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(sender2,&amp;nbsp;e2)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textBox1.Text&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;e2.Result.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;worker.RunWorkerAsync();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;在silverlight 中处理的手法也是类似的，同windows forms 不同，silverlight 更多的依赖异步处理，这同它host在浏览器环境中有关，因此，有些框架的api都有异步版本，如ExecuteSync,然后通过回调处理返回结果，如&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000;"&gt;db.Categories.ExecuteSync(arg&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;br /&gt;&lt;br /&gt;Dispatcher.BeginInvoke(()&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{gridView.ItemsSource&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;arg.Results;});&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;在.net 4中，引入了Task这个概念，新的async ctp 建立在Task这个基础之上&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;简单的说await 这个新的关键字能等待Task&amp;lt;T&amp;gt;的执行完成并取得结果&lt;/strong&gt;，在新的async,await 模式中，代码变得很简单&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('f352d4ac-3d80-40c9-8d1f-6a7ce36a66ee')"&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed" id="code_img_closed_f352d4ac-3d80-40c9-8d1f-6a7ce36a66ee" style="display:none" alt="" /&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" id="code_img_opened_f352d4ac-3d80-40c9-8d1f-6a7ce36a66ee" onclick="cnblogs_code_hide('f352d4ac-3d80-40c9-8d1f-6a7ce36a66ee',event)"&gt;&lt;div id="cnblogs_code_open_f352d4ac-3d80-40c9-8d1f-6a7ce36a66ee"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;strong&gt;async&lt;/strong&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;button3_Click(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Task&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Task&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;getTotalBytes();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.Start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textBox3.Text&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&lt;strong&gt;await&lt;/strong&gt;&amp;nbsp;t).ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;async/await其实需要框架做一些调整，从早先的ExecuteSync 接受一个回调 ,到现在要返回一个或多个已经开始的Task&amp;lt;T&amp;gt;实例，所以，早期的框架要修改才能适应这个关键字，不过自己的代码，就可以使用这种模式来简化编程了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jjx/aggbug/1864978.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jjx/archive/2010/10/30/1864978.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jjx/archive/2010/10/09/1846277.html</id><title type="text">新blog地址</title><summary type="text">转移到 www.easynew.com.cn/blog, 这里不再更新</summary><published>2010-10-09T00:50:00Z</published><updated>2010-10-09T00:50:00Z</updated><author><name>jjx</name><uri>http://www.cnblogs.com/jjx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jjx/archive/2010/10/09/1846277.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jjx/archive/2010/10/09/1846277.html"/><content type="html">转移到 &lt;a href="http://www.easynew.com.cn/blog"&gt;www.easynew.com.cn/blog&lt;/a&gt;, 这里不再更新 &lt;img src="http://www.cnblogs.com/jjx/aggbug/1846277.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jjx/archive/2010/10/09/1846277.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jjx/archive/2010/08/31/1813299.html</id><title type="text">青春咖啡馆</title><summary type="text">读了青春咖啡馆。那些地名和人物实在令人头晕。最让人迷惑的是当时处于一种怎样的社会背景，为什么这么多人想要逃离。露姬迷人之处在哪里呢？ 我觉的她很自私啊。据说译后记有解释，但我下载的电子书没有.或许有些事情是我们这些只顾埋头工作，或是在网上虚耗光阴，从不去酒吧，仅仅在某些场景（比方说吃饭或谈事情）才会去咖啡馆的人所无法理解的，不断的逃离，那是一种怎样的体验，对背负了太多责任的我们而言，那是连想都不敢...</summary><published>2010-08-31T00:50:00Z</published><updated>2010-08-31T00:50:00Z</updated><author><name>jjx</name><uri>http://www.cnblogs.com/jjx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jjx/archive/2010/08/31/1813299.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jjx/archive/2010/08/31/1813299.html"/><content type="html">&lt;p&gt;读了青春咖啡馆。那些地名和人物实在令人头晕。最让人迷惑的是当时处于一种怎样的社会背景，为什么这么多人想要逃离。露姬迷人之处在哪里呢？ 我觉的她很自私啊。据说译后记有解释，但我下载的电子书没有.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;或许有些事情是我们这些只顾埋头工作，或是在网上虚耗光阴，从不去酒吧，仅仅在某些场景（比方说吃饭或谈事情）才会去咖啡馆的人所无法理解的，不断的逃离，那是一种怎样的体验，对背负了太多责任的我们而言，那是连想都不敢想的事情吧&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jjx/aggbug/1813299.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jjx/archive/2010/08/31/1813299.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jjx/archive/2010/06/13/1757616.html</id><title type="text">2010 计划</title><summary type="text">１. 将工作平台从windows 转到ubuntu2. 将工作重点转到web 开发３. 做３｀４个产品，平均３个月作一个产品</summary><published>2010-06-13T02:59:00Z</published><updated>2010-06-13T02:59:00Z</updated><author><name>jjx</name><uri>http://www.cnblogs.com/jjx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jjx/archive/2010/06/13/1757616.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jjx/archive/2010/06/13/1757616.html"/><content type="html">&lt;p&gt;１. 将工作平台从windows 转到ubuntu&lt;/p&gt;&lt;p&gt;2. 将工作重点转到web 开发&lt;/p&gt;&lt;p&gt;３. 做３｀４个产品，平均　３个月作一个产品&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jjx/aggbug/1757616.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jjx/archive/2010/06/13/1757616.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jjx/archive/2009/08/24/1552629.html</id><title type="text">axapta 断开的记录集</title><summary type="text">[代码]</summary><published>2009-08-24T00:50:00Z</published><updated>2009-08-24T00:50:00Z</updated><author><name>jjx</name><uri>http://www.cnblogs.com/jjx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jjx/archive/2009/08/24/1552629.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jjx/archive/2009/08/24/1552629.html"/><content type="text">[代码]</content></entry><entry><id>http://www.cnblogs.com/jjx/archive/2009/07/30/1534883.html</id><title type="text">django 1.1</title><summary type="text">django 1.1 的每个新特色都非常的喜欢管理界面1. action ,list_editable, 这两个特性都是针对changelist,action允许选择一些记录进行操作，而list_editable,则允许你直接在changelist中进行更新orm1. 聚集函数和F表达式（允许你引用其它字段)2. proxy ，允许你扩展已经存在的model3.managed=False 让你的m...</summary><published>2009-07-30T03:38:00Z</published><updated>2009-07-30T03:38:00Z</updated><author><name>jjx</name><uri>http://www.cnblogs.com/jjx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jjx/archive/2009/07/30/1534883.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jjx/archive/2009/07/30/1534883.html"/><content type="text">django 1.1 的每个新特色都非常的喜欢管理界面1. action ,list_editable, 这两个特性都是针对changelist,action允许选择一些记录进行操作，而list_editable,则允许你直接在changelist中进行更新orm1. 聚集函数和F表达式（允许你引用其它字段)2. proxy ，允许你扩展已经存在的model3.managed=False 让你的m...</content></entry><entry><id>http://www.cnblogs.com/jjx/archive/2009/07/24/1530352.html</id><title type="text">south</title><summary type="text">migration 这种东西一般适用在数据库已经初步定型，可能已经在试运行，有业务数据的情况下。否则，用migration可能会花费额外的时间早先通常的流程是修改model定义，然后manage.py syncdb . 在使用south后，流程就改为①修改model②创建migration 脚本，自动或手动创建③用manage.py migrate app [x...</summary><published>2009-07-24T08:51:00Z</published><updated>2009-07-24T08:51:00Z</updated><author><name>jjx</name><uri>http://www.cnblogs.com/jjx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jjx/archive/2009/07/24/1530352.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jjx/archive/2009/07/24/1530352.html"/><content type="text">migration 这种东西一般适用在数据库已经初步定型，可能已经在试运行，有业务数据的情况下。否则，用migration可能会花费额外的时间早先通常的流程是修改model定义，然后manage.py syncdb . 在使用south后，流程就改为①修改model②创建migration 脚本，自动或手动创建③用manage.py migrate app [x...</content></entry><entry><id>http://www.cnblogs.com/jjx/archive/2009/07/22/1528299.html</id><title type="text">理解zope3 的适配器</title><summary type="text">zope 3有三种类型的组件，内容组件，适配器和实用组件1. 内容组件内容组件相当于我们平时常说的entity,model,比方说User,Category,Department,Order 都可以理解为内容组件， 例子classIUser(Interface):name=Attribute('name')password=Attribute('password')email=Attribute(...</summary><published>2009-07-22T02:04:00Z</published><updated>2009-07-22T02:04:00Z</updated><author><name>jjx</name><uri>http://www.cnblogs.com/jjx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jjx/archive/2009/07/22/1528299.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jjx/archive/2009/07/22/1528299.html"/><content type="text">zope 3有三种类型的组件，内容组件，适配器和实用组件1. 内容组件内容组件相当于我们平时常说的entity,model,比方说User,Category,Department,Order 都可以理解为内容组件， 例子classIUser(Interface):name=Attribute('name')password=Attribute('password')email=Attribute(...</content></entry><entry><id>http://www.cnblogs.com/jjx/archive/2009/07/08/1518995.html</id><title type="text">准备放弃django</title><summary type="text">花了半年多时间在django,当然，主要是做项目，研究的不算深入。但总体感觉而言，django现在的状态很适合刚进入python web开发的新手（全堆栈，良好的社区，良好的文档，较多的使用者，没有使用较多的魔术），它得确也能满足大部分需求，只是后期，大家可能要引入一些第三方的东西。 当你为了明确和优化查询，引入sqlalchemy后，你的项目就同时并存了django orm和sqlalchemy...</summary><published>2009-07-08T03:30:00Z</published><updated>2009-07-08T03:30:00Z</updated><author><name>jjx</name><uri>http://www.cnblogs.com/jjx/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jjx/archive/2009/07/08/1518995.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jjx/archive/2009/07/08/1518995.html"/><content type="text">花了半年多时间在django,当然，主要是做项目，研究的不算深入。但总体感觉而言，django现在的状态很适合刚进入python web开发的新手（全堆栈，良好的社区，良好的文档，较多的使用者，没有使用较多的魔术），它得确也能满足大部分需求，只是后期，大家可能要引入一些第三方的东西。 当你为了明确和优化查询，引入sqlalchemy后，你的项目就同时并存了django orm和sqlalchemy...</content></entry></feed>
