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

東坡下載:內容最豐富最安全的下載站!

首頁最新資訊 → 國產WindowsPhone 7 PC端實時截圖工具制作進程

國產WindowsPhone 7 PC端實時截圖工具制作進程

相關文章發表評論 來源:本站時間:2011/6/24 0:02:56字體大小:A-A+

作者:點擊:775次評論:0次標簽:

三、圖片傳出去

我們已經解決了截屏和后臺運行的問題,下面怎么把截屏下來的內容顯示到PC上呢?肯定使用網絡了。簡單測試以后非常開心,只要把手機連接到電腦上,并且啟動Zune,將電腦和手機設置為Connected狀態,這樣手機就可以連接電腦上的網絡服務了,還可以通過電腦來訪問外網,無需Wifi。

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

編寫手機端程序,定時截取圖片傳到服務器,服務器顯示正常。偶耶!

依照我多年的開發經驗,我感覺這么順的就實現了絕對不正常,果然發現了問題。在截圖程序中進行的操作都能截屏顯示出來,但是離開程序后截屏過程竟然停止了,畫面一直停在離開前的畫面上。我勒個去,難道"修改注冊表讓WP7支持多任務的方法"只是一個傳說?但是一調試就傻了,定時截屏的任務依然在忠實的執行著,也就是截屏程序確實是在后臺執行的。這是為什么呢?

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

WebClient wc = new WebClient();

wc.OpenWriteCompleted+=new OpenWriteCompletedEventHandler(wc_OpenWriteCompleted);

wc.OpenWriteAsync(Uri);

OpenWriteAsync執行完畢后上傳操作并沒有立即開始,而是wc_OpenWriteCompleted這個異步方法中執行。經過調試發現當離開手機程序以后,雖然后臺線程還在運行,但是wc_OpenWriteCompleted方法不會再被觸發。我猜測Silverlight中也是通過類似于Win32中的WM_TIMER事件實現的消息泵來進行任務的所謂“異步執行”的,當離開程序以后UI線程就暫停,所以異步操作就執行不了了。經過一通的反編譯、查資料,發現確實如此,Dispatcher是靠DispatcherTimer來實現的。

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

編寫類似于下面的代碼來調用私有方法吧!

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

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

不幸的是調用過程發生異常,經過查詢資料得知一個不幸的消息,基于安全考慮,Windows Phone中不能通過反射調用私有成員。

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

相關評論

閱讀本文后您有什么感想? 已有 人給出評價!

  • 2791 喜歡喜歡
  • 2101 頂
  • 800 難過難過
  • 1219 囧
  • 4049 圍觀圍觀
  • 5602 無聊無聊
熱門評論
最新評論
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字數: 0/500 (您的評論需要經過審核才能顯示)

本類常用軟件

主站蜘蛛池模板: 美女视频导航 | 青草草产国视频 | 欧美 日韩 成人 | 欧美性受xxxx视频 | 亚州视频一区二区 | 亚洲国产欧美一区 | 999精品久久久中文字幕蜜桃 | 99成人免费视频 | 一区二区三区四区亚洲 | 在线观看日韩精品 | 欧美成人久久久免费播放 | 亚洲高清成人 | 亚洲久操| 成人超污免费网站在线看 | 天天草天天干 | 国产一区二区三区免费观看 | 亚洲第一免费视频 | 国产偷国产偷在线高清 | 国产精品亚洲欧美动漫卡通 | 精品综合久久久久久98 | 免费成人在线网站 | 伊人最新网址 | 国产极品粉嫩 | 日韩黄色网 | 日本韩国三级在线观看 | 狠狠干香蕉 | 亚洲国产午夜精品理论片的软件 | 黄色片免费在线播放 | 午夜视频福利在线观看 | 欧美日韩国产在线成人网 | 成人欧美精品大91在线 | 国产人成精品免费视频 | 国内外成人免费在线视频 | 在线中文字幕网站 | 精品久久久久国产免费 | 九九精品国产99精品 | 在线观看www | 成人动漫视频观看免费 | www福利| 欧美日韩高清在线观看一区二区 | 国产欧美日韩免费 |