变态重口极致另类在线-波多久久夜色精品国产-波多野结衣在线观看一区-波多野结衣在线观看一区二区-污污的网站免费阅读-污污视频网址

當(dāng)前位置:首頁文章首頁 新聞中心

國(guó)產(chǎn)WindowsPhone 7 PC端實(shí)時(shí)截圖工具制作進(jìn)程

作者:  來源:  發(fā)布時(shí)間:2011-6-24 0:02:56  點(diǎn)擊:

三、圖片傳出去

我們已經(jīng)解決了截屏和后臺(tái)運(yùn)行的問題,下面怎么把截屏下來的內(nèi)容顯示到PC上呢?肯定使用網(wǎng)絡(luò)了。簡(jiǎn)單測(cè)試以后非常開心,只要把手機(jī)連接到電腦上,并且啟動(dòng)Zune,將電腦和手機(jī)設(shè)置為Connected狀態(tài),這樣手機(jī)就可以連接電腦上的網(wǎng)絡(luò)服務(wù)了,還可以通過電腦來訪問外網(wǎng),無需Wifi。

因?yàn)镸ango之前的WP7只支持通過WebClient訪問Http網(wǎng)絡(luò),無法編寫普通Socket程序(除非用上面的方法調(diào)用Dll),因此服務(wù)器端我用一個(gè)Http服務(wù)器接收客戶端提交上來的截圖圖片流然后顯示出來即可,服務(wù)器端我用了一個(gè)開源的嵌入式http服務(wù)器“C# WebServer”(本地下載包),這樣避免部署IIS,直接啟動(dòng)WinForm程序就能運(yùn)行服務(wù)器,手機(jī)端通過WebClient來提交截屏的數(shù)據(jù)。服務(wù)器端和客戶端的實(shí)現(xiàn)都是普通的.Net操作,不再詳細(xì)講,感興趣的可以參考傳智播客的.Net免費(fèi)視頻教程。

編寫手機(jī)端程序,定時(shí)截取圖片傳到服務(wù)器,服務(wù)器顯示正常。偶耶!

依照我多年的開發(fā)經(jīng)驗(yàn),我感覺這么順的就實(shí)現(xiàn)了絕對(duì)不正常,果然發(fā)現(xiàn)了問題。在截圖程序中進(jìn)行的操作都能截屏顯示出來,但是離開程序后截屏過程竟然停止了,畫面一直停在離開前的畫面上。我勒個(gè)去,難道"修改注冊(cè)表讓W(xué)P7支持多任務(wù)的方法"只是一個(gè)傳說?但是一調(diào)試就傻了,定時(shí)截屏的任務(wù)依然在忠實(shí)的執(zhí)行著,也就是截屏程序確實(shí)是在后臺(tái)執(zhí)行的。這是為什么呢?

熟悉Silverlight、Windows Phone的朋友知道,SL/WP7中的WebClient操作全部是異步的,沒有普通.net中DownloadData()、UploadData()等阻塞方法,例如:

WebClient wc = new WebClient();

wc.OpenWriteCompleted+=new OpenWriteCompletedEventHandler(wc_OpenWriteCompleted);

wc.OpenWriteAsync(Uri);

OpenWriteAsync執(zhí)行完畢后上傳操作并沒有立即開始,而是wc_OpenWriteCompleted這個(gè)異步方法中執(zhí)行。經(jīng)過調(diào)試發(fā)現(xiàn)當(dāng)離開手機(jī)程序以后,雖然后臺(tái)線程還在運(yùn)行,但是wc_OpenWriteCompleted方法不會(huì)再被觸發(fā)。我猜測(cè)Silverlight中也是通過類似于Win32中的WM_TIMER事件實(shí)現(xiàn)的消息泵來進(jìn)行任務(wù)的所謂“異步執(zhí)行”的,當(dāng)離開程序以后UI線程就暫停,所以異步操作就執(zhí)行不了了。經(jīng)過一通的反編譯、查資料,發(fā)現(xiàn)確實(shí)如此,Dispatcher是靠DispatcherTimer來實(shí)現(xiàn)的。

沒辦法了嗎?No!向灰太狼先生學(xué)習(xí)“我一定會(huì)回來的”!不要以為這樣就能攔住我!消息泵停了我能給你來一個(gè)“心臟起搏器”強(qiáng)迫消息泵繼續(xù)運(yùn)轉(zhuǎn),經(jīng)過反編譯、反射發(fā)現(xiàn)Dispatcher有一個(gè)私有的Dispatch方法用來驅(qū)動(dòng)消息泵,我不斷的調(diào)用Dispatch方法不就可以強(qiáng)迫消息泵運(yùn)轉(zhuǎn)了嗎?有人問“私有方法不是不能調(diào)用嗎?”,一切限制都是給別人設(shè)置的,堅(jiān)強(qiáng)的灰太狼總能想到解決方案。“通過反射調(diào)用私有成員”這已經(jīng)是一個(gè)非常常見的一個(gè)高級(jí)技術(shù)了,可以解決很多常規(guī)手段解決不了的問題。當(dāng)然如果你不了解如何實(shí)現(xiàn)“通過反射調(diào)用私有成員”這又想學(xué)習(xí)的朋友可以關(guān)注傳智播客的.Net培訓(xùn),其中“.Net 高級(jí)技術(shù)”的課程就講到了這些。

編寫類似于下面的代碼來調(diào)用私有方法吧!

var m = d.GetType().GetMethod("Dispatch", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

mInvoke(d, new object[] {});

不幸的是調(diào)用過程發(fā)生異常,經(jīng)過查詢資料得知一個(gè)不幸的消息,基于安全考慮,Windows Phone中不能通過反射調(diào)用私有成員。

看來通過WebClient發(fā)送截圖的思路失敗了,幸好能夠通過前面說的方法調(diào)用Native的代碼,我開啟VC++調(diào)用socket api編寫了提交Http二進(jìn)制數(shù)據(jù)的一個(gè)Com組件,沒想到自認(rèn)為TCP搞的還算不錯(cuò)的我竟然在這個(gè)“小環(huán)節(jié)”上載了跟頭,連續(xù)熬了兩個(gè)晚上調(diào)試Http發(fā)送圖片流都沒有調(diào)試成功,總是發(fā)送前幾幀能顯示后面的數(shù)據(jù)就全部亂掉了,沒過多久還報(bào)了10061之類經(jīng)典的Socket錯(cuò)誤碼。而把同樣的代碼放到Windows XP下編譯運(yùn)行就沒問題。在無數(shù)次“我的Socket代碼的錯(cuò)?”、“Windows CE Socket有特殊的地方?”、“凌晨三點(diǎn)了,快點(diǎn)睡吧”、“差一點(diǎn)就好了,再熬一會(huì)”的掙扎中,我最終放棄了。改為調(diào)用高度封裝wininet中的HttpOpenRequest等方法來實(shí)現(xiàn),很快就運(yùn)行通過了。至今沒有搞清楚到底是我的代碼的問題還是Windows CE的Socket有特殊的地方,如果是我代碼的原因那么可能就是沒有處理好大數(shù)據(jù)量的緩沖區(qū)、“Http 1.1/ 100 continue” 等細(xì)節(jié)問題。還好通過HttpOpenRequest這種方法實(shí)現(xiàn)了,期待網(wǎng)絡(luò)編程牛人的指導(dǎo)。

文章評(píng)論

軟件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
主站蜘蛛池模板: 国产精品乱 | 男女很黄很色床视频网站免 | 国产亚洲欧美久久精品 | 青青草狠狠干 | 日韩欧美高清视频 | 最近中文字幕视频国语中文字幕 | 网站色 | 日韩一级在线播放 | 成人人观看的免费毛片 | 日本精品一区 | 你懂的在线观看网站 | 日日夜夜摸 | 在线99| 亚洲本道| 色狠狠色综合久久8狠狠色 色狠狠成人综合网 | 亚洲欧美网 | 日日摸夜夜摸人人嗷嗷叫 | 香蕉黄网| 成年网站在线观看视频 | 特黄特黄aaaa级毛片免费看 | 日韩啪 | 午夜湿影院多多影院 | 色噜噜狠狠色综合中国 | 欧美videos极品另类 | 亚洲噜噜噜噜噜影院在线播放 | 亚洲国产欧美91 | 日韩 欧美 综合 在线 制服 | 免费看欧美一级特黄α大片 | 久久精品一区二区国产 | 精品一区二区三区的国产在线观看 | 天天摸天天做天天爽 | 免费大片a一级一级 | 亚洲国产一区二区三区青草影视 | 成人久久伊人精品伊人 | 欧美大成色www永久网站婷 | 天天做天天爱夜夜爽毛片毛片 | 国产在线精品观看 | 亚洲网址| 国产精品边做边接电话在线观看 | 国产小视频免费观看 | 日韩免费精品视频 |