2010-04-03 117 views
1

我有一個命令行C#服務器和一個ASP.NET客戶端,它們都通過.NET Remoting進行通信。服務器正在向客戶端發送從網絡攝像頭抓取的靜止圖像,例如每秒2幀。我可以通過遠程方法調用傳遞圖像到客戶端,並在該客戶端方法圖像結束:從內存中更新ASP.NET頁面中的圖像而不刷新頁面

public void Update(System.Drawing.Image currentFrame) 
    { 
     // I need to display the currentFrame on my page. 
    } 
  1. 如何顯示在頁面上的圖像,無需將影像保存到硬盤?如果它是一個winForms應用程序,我可以將currentFrame傳遞給picturebox即。 picturebox.Image = currentFrame

  2. 以上Update方法每秒至少被激發2次。如果客戶端是winForms應用程序,我可以簡單地把picturebox.Image = currentFrame和屏幕上的當前幀會自動更新。我如何實現與ASP.NET相同的效果?整個頁面是否需要重新加載等?我想基本上讓它看起來像一個實時視頻源!

回答

1

您已將一名玩家退出遊戲:瀏覽器。你的問題真的是:我如何讓瀏覽器在Internet上的一些隨機計算機上,根據服務器中發生的情況更新它顯示的圖像。

答案當然是:你不知道。

您可以將圖像放置在UpdatePanel中,並根據計時器更新面板。圖像的src屬性的URL將不得不導致您自己的HttpHandler.ashx文件),這會調用服務器以獲取最新的圖像。

永遠記住Web的工作原理:瀏覽器處於控制狀態,而不是服務器端。

P.S. .NET Remoting已被棄用,以支持WCF。

1

您需要在服務器上有一個頁面或處理程序來呈現圖像。這是它的工作。然後,您可以在顯示作用於計時器的圖像的頁面上顯示javascript(window.setTimeout),並不斷輪詢服務器以獲取更新的圖像。您可能希望在查詢字符串中使請求具有一定的動態性,因此您不會被重新顯示緩存的圖像而不是被服務器發送的新圖像。喜歡的東西

<script type="text/javascript" language="javascript"> 
    i = 0; 
    window.setTimeout(updateImage, 500); 
    var img = document.getElementById('img_to_update'); 

    function updateImage() { 
     img.src = 'imageRenderer.aspx?req=' + i; 
     i += 1; 
     window.setTimeout(updateImage, 500); 
    } 
</script> 

i只會保持獨特的,以防止緩存問題的請求。

無論如何,這是確切的腳本?也許不是,我把它寫成了我的頭頂,而且自從我做了類似的事情之後已經有一段時間了。但是它應該讓你瞭解如何實現服務器端技術的客戶端獨立功能的一部分。 (該腳本可以在任何頁面上,靜態或動態呈現。)