<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Room302</title>
	<atom:link href="http://room302.cn/feed/" rel="self" type="application/rss+xml" />
	<link>http://room302.cn</link>
	<description>每一天都是崭新的</description>
	<lastBuildDate>Fri, 02 Mar 2012 15:59:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>使用Git、Beyond Compare遇到的一些问题</title>
		<link>http://room302.cn/git-crlf-lf-beyond-compare/</link>
		<comments>http://room302.cn/git-crlf-lf-beyond-compare/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 15:31:43 +0000</pubDate>
		<dc:creator>dreamtale</dc:creator>
				<category><![CDATA[工作]]></category>

		<guid isPermaLink="false">http://room302.cn/?p=992</guid>
		<description><![CDATA[之前在项目中在向git提交代码的时候，由于是在Windows平台下，每次都会有一个warning：大致是说LF will be replaced by CRLF，因为当时纳品比较急，所以在确认不会有很大问题后，就没有再去追究。昨天同事在使用git的时候又遇到了同样的问题，关键是还遇到个问题导致Beyond Compare在比较本地SVN代码与git目录下代码的时候，很多source文件显示是不一样的，但是在打开之后又显示都一样。这样就很郁闷，本来想看修改文件的差异，这种情况直接就无奈了。 于是就做了一番调查。先说为什么git会报warning，普及一个知识，LF和CRLF在文本中都是代表new line的意思，只是LF用于Linux、Unix等系统下，而CRLF主要用于Windows下。而git设置里边有一个autocrlf的配置，默认情况下，他的设置是为true，你可以通过git config core.autocrlf来看你的配置。如果这个是true的话，每次在你向git本地库中添加文件的时候，都会默认的把所有的CRLF转为LF，而当你从git上checkout的时候，这些文件又会把LF转为CRLF。这个设置主要是为了支持一个项目中的跨平台开发而用的。Windows下设置为true还是比较合适的。 既然知道为什么会有waning了，那么Beyond Compare又是怎么回事？打开Beyond Compare的文件比较设置，会有一个比较的规则设定，如图 我刚好选择了Binary comparison，这就是导致问题的原因，由于在不同系统下表示new line的方式不同，这样就势必导致文件的二进制会不一样，所以自然也就会显示文件不一样了。为了证实二进制不一样，我用Beyond Compare的Hex viewer比较了一下两个内容相同的文件： 图中的0D表示CR，OA表示LF，细心的同学还会看到这两个文件大小也明显不一样，用CRLF表示new line的文件要比只用LF表示的大一些。 那么如何来解决这个问题呢，尝试之后，选择Rules-based comparison这个选项就可以了，具体是基于什么base rule，我并没有找到，可能是基于文本Content的比较吧。 另外一个比较选项是CRC校验，Beyond Compare官方博客并不推荐使用这种方式，一般情况下，完全可以用Binary comparison代替CRC，因为Binary comparison是一边读文件一边比较，一旦发现不同的时候，就停止读文件了。而CRC需要通过读取整个文件来计算校验值。那么CRC comparison在什么时候用呢，主要是在两个地方，一个是snapshot，因为它本身不是拥有所有的文件，这时候可以把CRC存进去，来进行比较，另一个是FTP，当本地文件与远程FTP文件比较的时候，并不需要将远程文件整个下载下来，再进行比较，只需要远程的FTP server计算出一个文件的CRC，传递会本地与本地文件的CRC比较就可以了。 又是好长时间没写博客了，年前一直在做一个时间特别紧的项目，年后又突击在学习Iphone开发，真是书到用时方恨少啊！]]></description>
			<content:encoded><![CDATA[<p>之前在项目中在向git提交代码的时候，由于是在Windows平台下，每次都会有一个warning：大致是说LF will be replaced by CRLF，因为当时纳品比较急，所以在确认不会有很大问题后，就没有再去追究。昨天同事在使用git的时候又遇到了同样的问题，关键是还遇到个问题导致Beyond Compare在比较本地SVN代码与git目录下代码的时候，很多source文件显示是不一样的，但是在打开之后又显示都一样。这样就很郁闷，本来想看修改文件的差异，这种情况直接就无奈了。</p>
<p>于是就做了一番调查。先说为什么git会报warning，普及一个<a href="http://en.wikipedia.org/wiki/Newline">知识</a>，LF和CRLF在文本中都是代表new line的意思，只是LF用于Linux、Unix等系统下，而CRLF主要用于Windows下。而git设置里边有一个autocrlf的配置，默认情况下，他的设置是为true，你可以通过git config core.autocrlf来看你的配置。如果这个是true的话，每次在你向git本地库中添加文件的时候，都会默认的把所有的CRLF转为LF，而当你从git上checkout的时候，这些文件又会把LF转为CRLF。这个设置主要是为了支持一个项目中的跨平台开发而用的。Windows下设置为true还是比较合适的。</p>
<p>既然知道为什么会有waning了，那么Beyond Compare又是怎么回事？打开Beyond Compare的文件比较设置，会有一个比较的规则设定，如图<span id="more-992"></span></p>
<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/coq7b.png" alt="" width="601" height="612" /></p>
<p>我刚好选择了Binary comparison，这就是导致问题的原因，由于在不同系统下表示new line的方式不同，这样就势必导致文件的二进制会不一样，所以自然也就会显示文件不一样了。为了证实二进制不一样，我用Beyond Compare的Hex viewer比较了一下两个内容相同的文件：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/eCY4S.png" alt="" width="1154" height="138" /><br />
图中的0D表示CR，OA表示LF，细心的同学还会看到这两个文件大小也明显不一样，用CRLF表示new line的文件要比只用LF表示的大一些。</p>
<p>那么如何来解决这个问题呢，尝试之后，选择Rules-based comparison这个选项就可以了，具体是基于什么base rule，我并没有找到，可能是基于文本Content的比较吧。</p>
<p>另外一个比较选项是CRC校验，Beyond Compare官方博客并不推荐使用这种方式，一般情况下，完全可以用Binary comparison代替CRC，因为Binary comparison是一边读文件一边比较，一旦发现不同的时候，就停止读文件了。而CRC需要通过读取整个文件来计算校验值。那么CRC comparison在什么时候用呢，主要是在两个地方，一个是snapshot，因为它本身不是拥有所有的文件，这时候可以把CRC存进去，来进行比较，另一个是FTP，当本地文件与远程FTP文件比较的时候，并不需要将远程文件整个下载下来，再进行比较，只需要远程的FTP server计算出一个文件的CRC，传递会本地与本地文件的CRC比较就可以了。</p>
<p>又是好长时间没写博客了，年前一直在做一个时间特别紧的项目，年后又突击在学习Iphone开发，真是书到用时方恨少啊！</p>
<p style="text-align: center;">
<embed src="http://player.youku.com/player.php/sid/XMTM3NzI1OTg0/v.swf" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://room302.cn/git-crlf-lf-beyond-compare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何在Android程序Force Closed后自动重启</title>
		<link>http://room302.cn/how-to-restart-android-application-after-it-is-force-closed/</link>
		<comments>http://room302.cn/how-to-restart-android-application-after-it-is-force-closed/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 14:32:05 +0000</pubDate>
		<dc:creator>dreamtale</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://room302.cn/?p=976</guid>
		<description><![CDATA[在开发Android程序中，都会或多或少的遇到程序被Force Closed，那么如何让程序在Force Closed后自动重启呢？可以通过以下两部来简单实现： 1、在Activity的onCreate方法里初始化一个PendingIntent,你可以在intent中put一个针对crash的code，这样下次Activity启动后，就可以通过get code来判断是否是restart，以此来做一些事情。 Intent intent = getIntent(); int code = intent.getIntExtra(RESTART_INTENT_KEY, 0); if (CRASHED_CODE == code) { /** You can do something here. */    Log.d(TAG, "So sorry that the application crashed."); } intent.putExtra(RESTART_INTENT_KEY, CRASHED_CODE); m_restartIntent = PendingIntent.getActivity(getApplicationContext(), &#8230; <a href="http://room302.cn/how-to-restart-android-application-after-it-is-force-closed/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>在开发Android程序中，都会或多或少的遇到程序被Force Closed，那么如何让程序在Force Closed后自动重启呢？可以通过以下两部来简单实现：<br />
1、在Activity的onCreate方法里初始化一个<a href="http://developer.android.com/reference/android/app/PendingIntent.html" target="_blank">PendingIntent</a>,你可以在intent中put一个针对crash的code，这样下次Activity启动后，就可以通过get code来判断是否是restart，以此来做一些事情。</p>
<pre class="brush:[java]">Intent intent = getIntent();
int code = intent.getIntExtra(RESTART_INTENT_KEY, 0);

if (CRASHED_CODE == code)
{
    /** You can do something here. */   
    Log.d(TAG, "So sorry that the application crashed.");
}

intent.putExtra(RESTART_INTENT_KEY, CRASHED_CODE);
m_restartIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);</pre>
<p>2、为当前Activity的Thread设置一个UncaughtExceptionHandler,当某个Thread因为未捕获的异常而终止的时候会回调到它，这样只需要在uncaughtException(Thread thread, Throwable ex)方法的实现中，设置一个alarm来启动程序，如下边代码，程序将会在Crash 3秒后自动重启。</p>
<pre class="brush:[java]">
private UncaughtExceptionHandler m_handler = new UncaughtExceptionHandler()
{
    @Override
    public void uncaughtException(Thread thread, Throwable ex)
    {
        Log.d(TAG, "uncaught exception is catched!");
        AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 3000, m_restartIntent);
        System.exit(2);
    }
};
Thread.setDefaultUncaughtExceptionHandler(m_handler);</pre>
<p>当然如果你觉得你的application在Force Closed后，自动重启并不是一个最佳的选择，也可以利用上述代码在程序Force Closed后保存一些程序Crash的Log，以便在以后的版本中修复Bug。</p>
]]></content:encoded>
			<wfw:commentRss>http://room302.cn/how-to-restart-android-application-after-it-is-force-closed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>忙碌的日子</title>
		<link>http://room302.cn/busy-month/</link>
		<comments>http://room302.cn/busy-month/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 14:30:20 +0000</pubDate>
		<dc:creator>dreamtale</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[心情]]></category>

		<guid isPermaLink="false">http://room302.cn/?p=964</guid>
		<description><![CDATA[好长时间没更新博客了，最近项目做得很累，每天的生活轨迹就是：早上起来挤地铁，工作，下班坐地铁，睡觉。自己的一些计划又被打乱，看来总是希望通过大块时间来实施自己的计划并不是最好的选择，以后要多多利用碎片的时间，慢慢锻炼增快自己大脑线程的切换 。 杂乱的生活有以下几个感悟： 不要低估我们某领导的精力，他的精力是无限的，无限的(彻夜加完班还要接着彻天)。 客户有的时候真的很让你无语，真的是很无语（我经历了从一开始不淡定到后来比较淡定）。 Google开发者大会是个好大会，以后每年都要参加。 找房子，好房子固然很重要，其实房东也很重要。 最后推荐一部好看的电影：《铁甲钢拳》，看得我很high，下边是电影的片尾曲。话说最近好电影很多啊，《猩球崛起》、《转山》都挺好看的。]]></description>
			<content:encoded><![CDATA[<p>好长时间没更新博客了，最近项目做得很累，每天的生活轨迹就是：早上起来挤地铁，工作，下班坐地铁，睡觉。自己的一些计划又被打乱，看来总是希望通过大块时间来实施自己的计划并不是最好的选择，以后要多多利用碎片的时间，慢慢锻炼增快自己大脑线程的切换 <img src='http://1.dreamtale.sinaapp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> 。</p>
<p>杂乱的生活有以下几个感悟：</p>
<p>不要低估我们某领导的精力，他的精力是无限的，无限的(彻夜加完班还要接着彻天)。</p>
<p>客户有的时候真的很让你无语，真的是很无语（我经历了从一开始不淡定到后来比较淡定）。</p>
<p>Google开发者大会是个好大会，以后每年都要参加。</p>
<p>找房子，好房子固然很重要，其实房东也很重要。</p>
<p>最后推荐一部好看的电影：《铁甲钢拳》，看得我很high，下边是电影的片尾曲。话说最近好电影很多啊，《猩球崛起》、《转山》都挺好看的。</p>
<p style="text-align: center;">
<embed src="http://player.youku.com/player.php/sid/XMzE0Njc2MzYw/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" allowFullscreen="true" type="application/x-shockwave-flash"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://room302.cn/busy-month/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何在android中为Http连接设置超时</title>
		<link>http://room302.cn/how-to-set-timeout-in-android/</link>
		<comments>http://room302.cn/how-to-set-timeout-in-android/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 13:01:56 +0000</pubDate>
		<dc:creator>dreamtale</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://room302.cn/?p=957</guid>
		<description><![CDATA[最近在项目中因为与服务器打交道，所以经常需要进行Http请求操作，最开始写代码的时候并没有在意超时的问题，一开始还没什么问题，后来在Debug的时候发现有的线程一直结束不了，很占用资源。于是通过DDMS分析之后得出线程一直运行是因为线程中的Http请求没有设置超时时间，而刚好服务器也没有设置超时时间，于是线程就悲剧了。 Android中(更准确说是Java中)支持两种Timeout：connect timeout 和 socket timeout。 那么如何设置超时呢？ 在通过HttpClient进行Http请求的时候，可以通过以下代码来设置Timeout： HttpClient httpclient = new DefaultHttpClient(); HttpParams params = httpclient.getParams(); HttpConnectionParams.setConnectionTimeout(params,NetworkConstant.CONNECT_TIMEOUT); HttpConnectionParams.setSoTimeout(params, NetworkConstant.SOCKET_TIMEOUT); 在通过UrlConnection进行Http请求的时候，可以通过以下代码来设置Timeout： URL url = new URL("http://www.google.com/"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(NetworkConstant.CONNECT_TIMEOUT); conn.setReadTimeout(NetworkConstant.SOCKET_TIMEOUT); 既然有两种Timeout，那自然就有两种TimeoutException：ConnectTimeoutException 和 SocketTimeoutException，如果想分别处理的话分别Catch就可以了，如果要统一处理只要Catch住它们的父类InterruptedIOException。]]></description>
			<content:encoded><![CDATA[<p>最近在项目中因为与服务器打交道，所以经常需要进行Http请求操作，最开始写代码的时候并没有在意超时的问题，一开始还没什么问题，后来在Debug的时候发现有的线程一直结束不了，很占用资源。于是通过DDMS分析之后得出线程一直运行是因为线程中的Http请求没有设置超时时间，而刚好服务器也没有设置超时时间，于是线程就悲剧了。</p>
<p>Android中(更准确说是Java中)支持两种Timeout：connect timeout 和 socket timeout。</p>
<p>那么如何设置超时呢？</p>
<p>在通过HttpClient进行Http请求的时候，可以通过以下代码来设置Timeout：</p>
<pre class="brush:[java]">
HttpClient httpclient = new DefaultHttpClient();
HttpParams params = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(params,NetworkConstant.CONNECT_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, NetworkConstant.SOCKET_TIMEOUT);
</pre>
<p>在通过UrlConnection进行Http请求的时候，可以通过以下代码来设置Timeout：</p>
<pre class="brush:[java]">
URL url = new URL("http://www.google.com/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(NetworkConstant.CONNECT_TIMEOUT);
conn.setReadTimeout(NetworkConstant.SOCKET_TIMEOUT);
</pre>
<p>既然有两种Timeout，那自然就有两种TimeoutException：<a href="http://developer.android.com/reference/java/net/SocketTimeoutException.html" target="_blank">ConnectTimeoutException</a> 和 <a href="http://developer.android.com/reference/java/net/SocketTimeoutException.html" target="_blank">SocketTimeoutException</a>，如果想分别处理的话分别Catch就可以了，如果要统一处理只要Catch住它们的父类<a href="http://developer.android.com/reference/java/io/InterruptedIOException.html" target="_blank">InterruptedIOException</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://room302.cn/how-to-set-timeout-in-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Follow your heart</title>
		<link>http://room302.cn/follow-your-heart/</link>
		<comments>http://room302.cn/follow-your-heart/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 02:41:23 +0000</pubDate>
		<dc:creator>dreamtale</dc:creator>
				<category><![CDATA[大学]]></category>
		<category><![CDATA[心情]]></category>

		<guid isPermaLink="false">http://dreamtale.blog.35.cn/?p=915</guid>
		<description><![CDATA[你不可能充满预见地将生命中的点点滴滴串联起来。只有在回头看的时候，才会发现这些点滴之间的联系。所以，你要坚信，现在所经历的一切都将或多或少与你的未来产生关联。你必须相信某些东西——决心、命运、生活、因缘际会等等。这种信仰从来没有让我感到失望，它让我的人生变得与众不同。    ————————乔布斯 每次看都有不一样的感受，发现自己之前大三的时候也写过一篇，这次再次分享出来，与大家共勉，也激励自己。 最后为这样一位一直following heart生活的人祝福。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/1HeEW.jpg" alt="" width="550" height="353" /></p>
<p>你不可能充满预见地将生命中的点点滴滴串联起来。只有在回头看的时候，才会发现这些点滴之间的联系。所以，你要坚信，现在所经历的一切都将或多或少与你的未来产生关联。你必须相信某些东西——决心、命运、生活、因缘际会等等。这种信仰从来没有让我感到失望，它让我的人生变得与众不同。    ————————乔布斯</p>
<p style="text-align: center;">
<embed src="http://player.youku.com/player.php/sid/XMjQ1MjYzOTEy/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" allowFullscreen="true" type="application/x-shockwave-flash"></embed>
</p>
<p>每次看都有不一样的感受，发现自己之前大三的时候也写过<a href="http://room302.cn/stay-hungry-stay-foolish/">一篇</a>，这次再次分享出来，与大家共勉，也激励自己。</p>
<p>最后为这样一位一直following heart生活的人祝福。</p>
]]></content:encoded>
			<wfw:commentRss>http://room302.cn/follow-your-heart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何在C#中获得当前文件名和行数</title>
		<link>http://room302.cn/how-to-retrieve-the-current-line-number-csharp/</link>
		<comments>http://room302.cn/how-to-retrieve-the-current-line-number-csharp/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 12:51:38 +0000</pubDate>
		<dc:creator>dreamtale</dc:creator>
				<category><![CDATA[工作]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[log]]></category>

		<guid isPermaLink="false">http://room302.cn/%e5%a6%82%e4%bd%95%e5%9c%a8c%e4%b8%ad%e8%8e%b7%e5%be%97%e5%bd%93%e5%89%8d%e6%96%87%e4%bb%b6%e5%90%8d%e5%92%8c%e8%a1%8c%e6%95%b0.html</guid>
		<description><![CDATA[在项目中有需求打印出当前函数调用处的行数，C++中可以用“__FILE__ and __LINE__”这个宏，那么在C#中应该如何实现类似的功能呢？ C#中提供了StackFrame这个类，通过调用它的方法即可简单的获得当前执行函数所在文件，以及在文件里的对应行数。 代码如下： public static void WriteLog(String msg) { StackFrame CallStack = new StackFrame(1, true); String SourceFile = CallStack.GetFileName(); int lineNum = CallStack.GetFileLineNumber(); WriteContent(msg, SourceFile, lineNum); } StatckFrame的构造函数中1代表堆栈上要跳过的帧数，也即用于构造StackFrame的帧当前指向了调用WriteLog这个方法的帧，true表示要捕获堆栈帧的文件名、行号和列号，如下图： 这样获得了函数堆栈上正确的帧数之后，就可以通过调用StackFrame 中的GetLineNumber等函数获得你想要的信息了。 ps：注意StackFrame需要有PDB Files的支持。 ps1：最后再来首歌，挺好听的，还有爱熊行动]]></description>
			<content:encoded><![CDATA[<p>在项目中有需求打印出当前函数调用处的行数，C++中可以用“__FILE__ and __LINE__”这个宏，那么在C#中应该如何实现类似的功能呢？</p>
<p>C#中提供了<a href="http://msdn.microsoft.com/zh-cn/library/system.diagnostics.stackframe_members(v=VS.95).aspx">StackFrame</a>这个类，通过调用它的方法即可简单的获得当前执行函数所在文件，以及在文件里的对应行数。</p>
<p>代码如下：</p>
<pre class="brush:[java]">
public static void WriteLog(String msg)
{
    StackFrame CallStack = new StackFrame(1, true);
    String SourceFile = CallStack.GetFileName();
    int lineNum = CallStack.GetFileLineNumber();
    WriteContent(msg, SourceFile, lineNum);
}</pre>
<p>StatckFrame的构造函数中1代表堆栈上要跳过的帧数，也即用于构造StackFrame的帧当前指向了调用WriteLog这个方法的帧，true表示要捕获堆栈帧的文件名、行号和列号，如下图：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/KHh7Y.jpg" alt="CSharp" width="800" height="197" /></p>
<p>这样获得了函数堆栈上正确的帧数之后，就可以通过调用StackFrame 中的GetLineNumber等函数获得你想要的信息了。</p>
<p>ps：注意StackFrame需要有<a href="http://msdn.microsoft.com/en-us/library/yd4f8bd1(v=VS.80).aspx">PDB Files</a>的支持。</p>
<p>ps1：最后再来首歌，挺好听的，还有爱熊行动 <img src='http://1.dreamtale.sinaapp.com/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /> </p>
<p style="text-align: center;">
<embed src="http://www.tudou.com/v/57l8pdOv9zM/&#038;resourceId=0_05_02_99/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="480" height="400"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://room302.cn/how-to-retrieve-the-current-line-number-csharp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>拿福能博主聚会</title>
		<link>http://room302.cn/nafuneng-blogger-party/</link>
		<comments>http://room302.cn/nafuneng-blogger-party/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 11:33:25 +0000</pubDate>
		<dc:creator>dreamtale</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[博客]]></category>
		<category><![CDATA[心情]]></category>

		<guid isPermaLink="false">http://room302.cn/%e6%8b%bf%e7%a6%8f%e8%83%bd%e5%a5%88%e7%b1%b3%e9%9c%b2%e5%8d%9a%e4%b8%bb%e8%81%9a%e4%bc%9a.html</guid>
		<description><![CDATA[本来应该早写的，因为这周一直在学习痛苦的C++，每天处于脑细胞负增长状态，结果就给搁浅了。 上周末参加了由拿福能组织，奈米露赞助的博主聚会。好长时间没参加这种聚会，上次参加还是09年时候WordPress camp 北京聚会。 先介绍一下拿福能吧，它是一个在东南亚比较成功的一个专门做博客广告的公司，目前刚来到中国进行推广，正在进行给力的1000博主分50000元活动，感兴趣的点此链接。 活动开始前，幸运的和他们这次来中国开辟市场的负责人David聊了会天（后来才知道的），马来西亚人，感觉很年轻，很有活力，也许经验上会有缺乏，但是肯定在与博主沟通以及听取意见上会有很大的优势，当然拭目以待了，话说他的中文说的挺好的。 活动细节就不叙述了，下面开始上图： David在给大家介绍拿福能在东南亚一些国家的成功广告案例 嘿 乐队的精彩演出，有兴趣的可去他们的豆瓣小站 这造型还不错吧 开吃前的合影 奈米露的美味食物，色香味俱全啊（吃到了日语课上日语老师推荐的天妇罗） 帅男美女的合影，（左边是嘿乐队，右边是鱼MM） 最后，这次聚会整体感觉挺好的，感谢拿福能把博主们聚集到了一块，感谢奈米露提供的惬意环境和美味食物。 一个刚在北京开店的日本料理店赞助了一个刚开始在中国做博客广告推广的广告公司，希望他们都能有好的发展。 ps：昨天看了几集裸婚时代，片尾曲挺好听的。]]></description>
			<content:encoded><![CDATA[<p>本来应该早写的，因为这周一直在学习痛苦的C++，每天处于脑细胞负增长状态，结果就给搁浅了。</p>
<p>上周末参加了由拿福能组织，奈米露赞助的博主聚会。好长时间没参加这种聚会，上次参加还是09年时候<a href="http://room302.cn/wordcamp-china-2009/">WordPress camp</a> 北京聚会。</p>
<p>先介绍一下拿福能吧，它是一个在东南亚比较成功的一个专门做博客广告的公司，目前刚来到中国进行推广，正在进行给力的1000博主分50000元活动，感兴趣的点此<a href="http://www.nuffnang.com.cn/blog/2011/05/23/challenge-1000/">链接</a>。</p>
<p>活动开始前，幸运的和他们这次来中国开辟市场的负责人David聊了会天（后来才知道的），马来西亚人，感觉很年轻，很有活力，也许经验上会有缺乏，但是肯定在与博主沟通以及听取意见上会有很大的优势，当然拭目以待了，话说他的中文说的挺好的。</p>
<p>活动细节就不叙述了，下面开始上图：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/p9sgY.jpg" alt="" width="686" height="514" /></p>
<p style="text-align: center;">David在给大家介绍拿福能在东南亚一些国家的成功广告案例<span id="more-895"></span></p>
<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/u4YPR.jpg" alt="" width="688" height="516" /></p>
<p style="text-align: center;">嘿 乐队的精彩演出，有兴趣的可去他们的<a href="http://site.douban.com/hhheeeiii/">豆瓣小站</a></p>
<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/XeSpT.jpg" alt="" width="689" height="919" /></p>
<p style="text-align: center;">这造型还不错吧</p>
<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/e4mfI.jpg" alt="" width="689" height="442" /></p>
<p style="text-align: center;">开吃前的合影</p>
<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/2cAAj.jpg" alt="" width="600" height="400" /></p>
<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/XtY6x.jpg" alt="" width="600" height="400" /></p>
<p style="text-align: center;">奈米露的美味食物，色香味俱全啊（吃到了日语课上日语老师推荐的天妇罗）</p>
<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/gd19Y.jpg" alt="" width="662" height="496" /></p>
<p style="text-align: center;">帅男美女的合影，（左边是嘿乐队，右边是鱼MM）</p>
<p>最后，这次聚会整体感觉挺好的，感谢拿福能把博主们聚集到了一块，感谢奈米露提供的惬意环境和美味食物。</p>
<p>一个刚在北京开店的日本料理店赞助了一个刚开始在中国做博客广告推广的广告公司，希望他们都能有好的发展。</p>
<p>ps：昨天看了几集裸婚时代，片尾曲挺好听的。</p>
<blockquote><p>
<embed src="http://player.youku.com/player.php/sid/XMjc3MDM4NDg4/v.swf" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://room302.cn/nafuneng-blogger-party/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>六月杂记</title>
		<link>http://room302.cn/june-miscellanies/</link>
		<comments>http://room302.cn/june-miscellanies/#comments</comments>
		<pubDate>Sat, 18 Jun 2011 20:11:44 +0000</pubDate>
		<dc:creator>dreamtale</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[心情]]></category>
		<category><![CDATA[那一年]]></category>

		<guid isPermaLink="false">http://room302.cn/%e6%9d%82%e8%ae%b0.html</guid>
		<description><![CDATA[这几天一直在关注一个骑车去西藏旅游的牛逼人士的微博，很向往，向往自己也能骑车的时候被猪撞了（微博上说，路上遇到的一位女同胞骑车的时候被猪撞了，真原生态），自己什么时候也要去感受一下，这才叫生活，每天一尘不变的生活也是会让人厌烦的。 晚上突然得知一个在摩登音乐节认识的朋友今年毕业，月底就回老家大理了。好久没联系，突然收到这样一条消息还是挺意外的，大理也是我旅游地中向往的地方，我会去那找你玩的。问他为啥不在北京找个工作，他说不喜欢大城市的生活，能以自己喜欢的方式生活是一件很不错的事情，希望你在自己的故乡大理生活的快乐。 最近开始学习C++了，整天遨游在指针的海洋里不能自已。 今天就是父亲节了，帮爸爸在京东上买了几本回忆录的书籍，希望会喜欢（突然想到是不是可以办这样一个网站，专门为年轻人推荐一些父辈感兴趣的东西，需求应该挺大的）。 最后，文章开始的图片是从回大理的朋友豆瓣相册里拿来的,很美吧。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img src="http://i.imgur.com/o4WLX.jpg" alt="" width="600" height="401" /></p>
<p><span>这几天一直在关注一个骑车去西藏旅游的牛逼人士的微博，很向往，向往自己也能骑车的时候被猪撞了（微</span>博<span>上说，路上遇到的一位女同胞骑车的时候被猪撞了，真原生态），自己什么时候也要去感受一下，这才叫生活，每天一尘不变的生活也是会让人厌烦的。</span></p>
<p>晚上突然得知一个在摩登音乐节认识的朋友今年毕业，月底就回老家大理了。好久没联系，突然收到这样一条消息还是挺意外的，大理也是我旅游地中向往的地方，我会去那找你玩的。问他为啥不在北京找个工作，他说不喜欢大城市的生活，能以自己喜欢的方式生活是一件很不错的事情，希望你在自己的故乡大理生活的快乐。</p>
<p>最近开始学习C++了，整天遨游在指针的海洋里不能自已。</p>
<p>今天就是父亲节了，帮爸爸在京东上买了几本回忆录的书籍，希望会喜欢（突然想到是不是可以办这样一个网站，专门为年轻人推荐一些父辈感兴趣的东西，需求应该挺大的）。</p>
<p>最后，文章开始的图片是从回大理的朋友豆瓣相册里拿来的,很美吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://room302.cn/june-miscellanies/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>转载：我希望四年前就有人告诉我的事情</title>
		<link>http://room302.cn/%e8%bd%ac%e8%bd%bd%ef%bc%9a%e6%88%91%e5%b8%8c%e6%9c%9b%e5%9b%9b%e5%b9%b4%e5%89%8d%e5%b0%b1%e6%9c%89%e4%ba%ba%e5%91%8a%e8%af%89%e6%88%91%e7%9a%84%e4%ba%8b%e6%83%85/</link>
		<comments>http://room302.cn/%e8%bd%ac%e8%bd%bd%ef%bc%9a%e6%88%91%e5%b8%8c%e6%9c%9b%e5%9b%9b%e5%b9%b4%e5%89%8d%e5%b0%b1%e6%9c%89%e4%ba%ba%e5%91%8a%e8%af%89%e6%88%91%e7%9a%84%e4%ba%8b%e6%83%85/#comments</comments>
		<pubDate>Mon, 30 May 2011 14:44:26 +0000</pubDate>
		<dc:creator>dreamtale</dc:creator>
				<category><![CDATA[学习]]></category>

		<guid isPermaLink="false">http://room302.cn/%e8%bd%ac%e8%bd%bd%ef%bc%9a%e6%88%91%e5%b8%8c%e6%9c%9b%e5%9b%9b%e5%b9%b4%e5%89%8d%e5%b0%b1%e6%9c%89%e4%ba%ba%e5%91%8a%e8%af%89%e6%88%91%e7%9a%84%e4%ba%8b%e6%83%85.html</guid>
		<description><![CDATA[创意在没有行动之前就如同那点点亮光，虽然看上去很美，但却微不足道，只有行动了，才会发现原来它可以更美。（这句子很美有木有） &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-原文分割线，好长的分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 就在2007年，我毅然离开了微软，加入了创业者的队伍。像很多第一次创业的人一样，我对这种冒险非常的兴奋。同样也跟很多第一次创业的人一样，我茫然没有头绪。 我参加各种活动，聚会，研讨会，和西雅图本地的创业社区密切交往。当我到了硅谷后，我发现这里有更多的活动，聚会，更多的研讨会。在这个创业生态系统里，一切很忙、很活跃，我收获了大量的人们共享出来的知识和体验，我如饥似渴的享用着。 我还满腔热情的看了很多的博客，视频和书籍。活动、聚会、研讨会中人们分享和讨论的都是非常好的主题。 我甚至还加入了一个创业孵化机构！ 直到决定开办自己的公司时，我才意识到，所有我的阅读、观看、参加的活动实际上没有给我带来任何的用处。我是认真的。完全没有任何用处。大部分我学到的东西都想不起来了，剩下一点能记住的也很少能应用到我现在的处境里。学习他人的经验和成功对我就像是在吃快餐，像是吃那些味道很好的垃圾食品，让我膨胀，让我自满。抱歉我在泼冷水，但这是事实。 起初，我努力把我学到的东西应用到我自己的问题里。不灵。这不可思议的时刻真的到来了，我平静的接受了这个事实：我浪费了大量的时间去学了一些根本不需要的东西，我相信有人说过的一句话正是在嘲笑我的这些行为：所有的这些活动，研讨会，博客文章都只是用来多拖延你一天立即行动的另一个借口。我默默的接受这个事实，以一个新手的心情往前走，沿着这个方向，我相信我将会理解出什么才是我需要的。 所有的变化由此而来。 我们每个人身上都有一种东西，想在这种存在着不确定性、具有风险的创业冒险活动中创造，成就，前进。但我们还有另外一种东西，每个人都希望能感到确定，可靠，让我们能做出正确的决策，让我们在这条道路上不至于失败、使自己受伤。矛盾冲突就是从此产生的。 可是这些博客，活动，访谈并不能真正的消解这些矛盾。只是暂时的，它让我知道，有很多人在做和我同样的事情，让我放松。去创业是让我走出我的安逸环境，而我所做的只是从一个安逸环境跳到另外一个安逸环境。你知道吗？我就职于一个不错的公司！ 一天，我反省一下我目前的状况，发现自己忙于很多事情，唯独没有把时间用于自己的产品上。几个月后，我终于鼓足勇气对自己说：这唯一重要的事情是真正的坐下来去做事。 别误会。我觉得有些博客和研讨会还是有价值的。但除非你真正的去实施什么事情、给你所学所扩展的关系网创造一个用武之地，你就是在浪费你的宝贵时间。 下面就是一些帮助了我去克服这“创业困惑综合征”的东西： ——我数周内不再阅读创业新闻和博客，我意识到对于我的产品我不缺任何东西。至于谁又获得了融资，谁被收购了，以及为什么在Google Chrome的竞争下IE丧失了它的市场份额，这跟我没有任何关系。我唯一要关心的人是客户，我唯一要关心的事情是他们的需求和愿望、如何提供他们最有价值的东西。 ——我数月不去参加那些创业相关的活动，而且开始通过咖啡和酒去交接朋友。每月我仍可能会去参加一两个活动，但那只是为了娱乐。我不再迷惑于为了成为一个企业家而且参加那些创业相关的活动。 ——我通过小项目来实践学习。我把一些想法细化成容易管理的细目，给自己设定期限去完成它们。项目和试验品是神奇的教学工具，因为你在学习你想要的，你在获得第一手资料。就像Keynotopia这个项目极大的帮助了我产生灵感，形成思路，我可以看见它，和它交互，展示给别人——这就是我首先要把它做出来的原因！有时一些小项目还可以让你获得不少收入。 ——每走一步，我都准备好一个问题清单，它能让我知道下一步该往哪里走。是该去获得更多的访问量？改进产品？还是在不提高访问量的情况下提高收入？我整理出最好的问题，然后研究它，咨询人们，然后把获得的答案立即付诸于行动。这些信息我都不会让它们在我的大脑里转的太久。 ——这是我的最爱：我更多的恐惧是产生于没有去行动，而不是相反的害怕去行动。我认识到，晚一天我没有让客户接受我的方案，竞争对手就多一天的机会比我先达到客户要求。我甚至设想到了如果我不能行动起来，最终将会看到最可怕的噩梦：从办公室又回到密尔顿，在Innotech的小隔间里饱食终日，拿着那个红色的订书机，等着下一次的发薪日。这正是我需要的充满魔力的紧迫感。 ——我第一是要把事情完成，然后才是把事情办对。我知道(深受教训)，做事的劲头重要无比。如果你在得到一个想法后不能立即付诸实施，最终很有可能的结局是这个想法被束之高阁。如今不论何时我得到了一个想法，我会盯着它让它成为现实，让它变成实际。我立即行动，虽然方式不成熟，但之后想办法改进，这样就学会了自己真正需要的东西。 ——面对现实：如果你不走出你的安逸环境、动手去干，什么事情都不会发生。等待再等待，罕有行动。 我想留给你们一句改变了我的生活的名言：成功的人并不是一定比别人更有才智和更幸运。他们只是在不断的尝试、不断的失败，直到成功。 不要做想象中的企业家。用行动和成果成为企业家。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/jMzkm.jpg" alt="" width="600" height="400" /></p>
<p>创意在没有行动之前就如同那点点亮光，虽然看上去很美，但却微不足道，只有行动了，才会发现原来它可以更美。（这句子很美有木有）<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-原文分割线，好长的分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p><span id="more-881"></span></p>
<p>就在2007年，我毅然离开了微软，加入了创业者的队伍。像很多第一次创业的人一样，我对这种冒险非常的兴奋。同样也跟很多第一次创业的人一样，我茫然没有头绪。</p>
<p>我参加各种活动，聚会，研讨会，和西雅图本地的创业社区密切交往。当我到了硅谷后，我发现这里有更多的活动，聚会，更多的研讨会。在这个创业生态系统里，一切很忙、很活跃，我收获了大量的人们共享出来的知识和体验，我如饥似渴的享用着。</p>
<p>我还满腔热情的看了很多的博客，视频和书籍。活动、聚会、研讨会中人们分享和讨论的都是非常好的主题。</p>
<p>我甚至还加入了一个创业孵化机构！</p>
<p>直到决定开办自己的公司时，我才意识到，所有我的阅读、观看、参加的活动实际上没有给我带来任何的用处。我是认真的。<strong>完全没有任何用处。</strong>大部分我学到的东西都想不起来了，剩下一点能记住的也很少能应用到我现在的处境里。学习他人的经验和成功对我就像是在吃快餐，像是吃那些味道很好的垃圾食品，让我膨胀，让我自满。抱歉我在泼冷水，但这是事实。</p>
<p>起初，我努力把我学到的东西应用到我自己的问题里。不灵。这不可思议的时刻真的到来了，我平静的接受了这个事实：我浪费了大量的时间去学了一些根本不需要的东西，我相信有人说过的一句话正是在嘲笑我的这些行为：<strong>所有的这些活动，研讨会，博客文章都只是用来多拖延你一天立即行动的另一个借口。</strong>我默默的接受这个事实，以一个新手的心情往前走，沿着这个方向，我相信我将会理解出什么才是我需要的。</p>
<p>所有的变化由此而来。</p>
<p>我们每个人身上都有一种东西，想在这种存在着不确定性、具有风险的创业冒险活动中创造，成就，前进。但我们还有另外一种东西，每个人都希望能感到确定，可靠，让我们能做出正确的决策，让我们在这条道路上不至于失败、使自己受伤。矛盾冲突就是从此产生的。</p>
<p>可是这些博客，活动，访谈并不能真正的消解这些矛盾。只是暂时的，它让我知道，有很多人在做和我同样的事情，让我放松。去创业是让我走出我的安逸环境，而我所做的只是从一个安逸环境跳到另外一个安逸环境。你知道吗？我就职于一个不错的公司！</p>
<p>一天，我反省一下我目前的状况，发现自己忙于很多事情，唯独没有把时间用于自己的产品上。几个月后，我终于鼓足勇气对自己说：<strong>这唯一重要的事情是真正的坐下来去做事。</strong></p>
<p>别误会。我觉得有些博客和研讨会还是有价值的。但除非你真正的去实施什么事情、给你所学所扩展的关系网创造一个用武之地，你就是在浪费你的宝贵时间。</p>
<p><strong>下面就是一些帮助了我去克服这“创业困惑综合征”的东西：</strong></p>
<p>——我数周内不再阅读创业新闻和博客，我意识到对于我的产品我不缺任何东西。至于谁又获得了融资，谁被收购了，以及为什么在Google Chrome的竞争下IE丧失了它的市场份额，这跟我没有任何关系。我唯一要关心的人是客户，我唯一要关心的事情是他们的需求和愿望、如何提供他们最有价值的东西。</p>
<p>——我数月不去参加那些创业相关的活动，而且开始通过咖啡和酒去交接朋友。每月我仍可能会去参加一两个活动，但那只是为了娱乐。我不再迷惑于为了成为一个企业家而且参加那些创业相关的活动。</p>
<p>——我通过小项目来实践学习。我把一些想法细化成容易管理的细目，给自己设定期限去完成它们。项目和试验品是神奇的教学工具，因为你在学习你想要的，你在获得第一手资料。就像<a href="http://www.keynotopia.com/">Keynotopia</a>这个项目极大的帮助了我产生灵感，形成思路，我可以看见它，和它交互，展示给别人——这就是我首先要把它做出来的原因！有时一些小项目还可以让你获得不少<a href="http://blog.amirkhella.com/2010/09/21/the-story-of-keynotopia-how-i-launched-a-profitable-product-in-3-hours/">收入</a>。</p>
<p>——每走一步，我都准备好一个问题清单，它能让我知道下一步该往哪里走。是该去获得更多的访问量？改进产品？还是在不提高访问量的情况下提高收入？我整理出最好的问题，然后研究它，咨询人们，然后把获得的答案立即付诸于行动。这些信息我都不会让它们在我的大脑里转的太久。</p>
<p>——<strong>这是我的最爱</strong>：我更多的恐惧是产生于没有去行动，而不是相反的害怕去行动。我认识到，晚一天我没有让客户接受我的方案，竞争对手就多一天的机会比我先达到客户要求。我甚至设想到了如果我不能行动起来，最终将会看到最可怕的噩梦：从办公室又回到密尔顿，在Innotech的小隔间里饱食终日，拿着那个红色的订书机，等着下一次的发薪日。这正是我需要的充满魔力的紧迫感。</p>
<p>——我第一是要把事情完成，然后才是把事情办对。我知道(深受教训)，做事的劲头重要无比。如果你在得到一个想法后不能立即付诸实施，最终很有可能的结局是这个想法被束之高阁。如今不论何时我得到了一个想法，我会盯着它让它成为现实，让它变成实际。我立即行动，虽然方式不成熟，但之后想办法改进，这样就学会了自己真正需要的东西。</p>
<p>——面对现实：如果你不走出你的安逸环境、动手去干，什么事情都不会发生。等待再等待，罕有行动。</p>
<p>我想留给你们一句改变了我的生活的名言：<strong>成功的人并不是一定比别人更有才智和更幸运。他们只是在不断的尝试、不断的失败，直到成功。</strong></p>
<p>不要做想象中的企业家。用行动和成果成为企业家。</p>
]]></content:encoded>
			<wfw:commentRss>http://room302.cn/%e8%bd%ac%e8%bd%bd%ef%bc%9a%e6%88%91%e5%b8%8c%e6%9c%9b%e5%9b%9b%e5%b9%b4%e5%89%8d%e5%b0%b1%e6%9c%89%e4%ba%ba%e5%91%8a%e8%af%89%e6%88%91%e7%9a%84%e4%ba%8b%e6%83%85/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF中的数据验证</title>
		<link>http://room302.cn/wpf-data-validate/</link>
		<comments>http://room302.cn/wpf-data-validate/#comments</comments>
		<pubDate>Sun, 29 May 2011 05:53:47 +0000</pubDate>
		<dc:creator>dreamtale</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[wpf]]></category>
		<category><![CDATA[数据验证]]></category>

		<guid isPermaLink="false">http://dreamtale.blog.35.cn/?p=857</guid>
		<description><![CDATA[最近在写与用户交互程序的时候，经常需要对用户输入的数据进行有效性的判断，当然你可以直接就禁止用户输入某些字符，但这样感觉用户体验上不好，所以一般的处理方法是给用户开放性的输入，对于错误的情况给予友好的提示。而要实现对数据的验证， 简单的方法可以写一堆if判断来处理需求中的逻辑，这样比较麻烦，而且代码看起来比较臃肿，最近在学习wpf，通过它的数据绑定就可以比较清晰而且简单的实现数据验证的功能。 大体需要三步： 1.需要一个与你控件进行数据绑定的类； class DataSource { private String _name; public String Name { get { return _name; } set { _name = value; } } private String _num; public String Number { get { return _num; } set { &#8230; <a href="http://room302.cn/wpf-data-validate/">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>最近在写与用户交互程序的时候，经常需要对用户输入的数据进行有效性的判断，当然你可以直接就禁止用户输入某些字符，但这样感觉用户体验上不好，所以一般的处理方法是给用户开放性的输入，对于错误的情况给予友好的提示。而要实现对数据的验证，</p>
<p>简单的方法可以写一堆if判断来处理需求中的逻辑，这样比较麻烦，而且代码看起来比较臃肿，最近在学习wpf，通过它的数据绑定就可以比较清晰而且简单的实现数据验证的功能。</p>
<p style="text-align: center;"><img class="aligncenter" src="http://i.imgur.com/B9qSK.png" alt="" /></p>
<p>大体需要三步：</p>
<p>1.需要一个与你控件进行数据绑定的类；</p>
<pre class="brush:[csharp]">
class DataSource
{
    private String _name;

    public String Name
    {
        get { return _name; }
        set { _name = value; }
    }
    private String _num;

    public String Number
    {
        get { return _num; }
        set { _num = value; }
    }
}</pre>
<p><span id="more-857"></span>2.需要你根据需求自定义一个规则来决定数据的有效性（写一个CustomRule从ValidationRule继承即可）；</p>
<pre class="brush:[csharp]"> class CustomValidationRule : ValidationRule
{

    private String _regex;

    private String _errorContent;

    public String ErrorContent
    {
        get { return _errorContent; }
        set { _errorContent = value; }
    }

    public String Regex
    {
        get { return _regex; }
        set { _regex = value; }
    }

    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        String s = value as String;
        {
            if (!IsValid(s ,Regex))
            {
                return new ValidationResult(false, ErrorContent);
            }
            else
            {
                return new ValidationResult(true, null);
            }
        }
    }

    private bool IsValid(String s,String regex)
    {
        try
        {
            Regex reg = new Regex(regex);
            return reg.IsMatch(s);
        }
        catch (System.Exception ex)
        {
            return false;
        }
    }
}</pre>
<p>3.对控件进行数据绑定，以及可以自定义一些ErrorTemplate。</p>
<p><a href="http://dl.dbank.com/c03pzo40xi">Demo下载</a></p>
<blockquote><p>
<embed src="http://player.youku.com/player.php/sid/XMTE1MzMxMDgw/v.swf" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://room302.cn/wpf-data-validate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

