2012-02-20 17 views
1

Windowsアプリケーションで帯域幅調整機能を実装する必要があります。そこSO上の2つのスレッドです:C#のWindowsアプリケーションの帯域幅スロットル

は、しかし、それは、Webアプリケーションのためです。私はWindowsアプリのためにそれが必要です。 Windowsでどのように実装できますか? 上記のリンクをWindowsアプリケーションに使用できますか?ここで

は、私が使用していたコードです:

// Apply bandwidth control 
int uploadLimit = GlobalClass.GetFileUploadLimit(); 

if (uploadLimit > 0) 
{ 
    long bps = uploadLimit * 1024; 
    const int BufferSize = 8192; 
    MemoryStream mstream = new MemoryStream();//Stream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize); 

    // Openup source stream. 
    using (FileStream sourceStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize)) 
    { 
    // Create throttled destination stream. 
    ThrottledStream destinationStream = new ThrottledStream(mstream, bps); 
    byte[] buffer = new byte[BufferSize]; 
    int readCount = sourceStream.Read(buffer, 0, BufferSize); 

    while (readCount > 0) 
    { 
     destinationStream.Write(buffer, 0, readCount); 
     readCount = sourceStream.Read(buffer, 0, BufferSize); 
     client.FileUpload(Convert.ToInt16(userId), System.IO.Path.GetFileName(fileName), buffer); 
     //Webservice: Here is the problem 
    } 
    } 
} 

を上記のコードでは、私はファイルをアップロードするために使用していたWebサービスがあります。このWebサービスは、一度にバイト単位でファイル全体を取得します。この場合、ファイルをチャンクにアップロードすることはできません。誰も私にこれを達成するための何らかの方法を提案することができますか、またはチャンク内のデータを受け入れるためにサービスを変更する必要がありますか?

+1

投稿した2番目のリンクには、ThrolledStreamの例へのリンクがあります。それはあなたのWindowsアプリケーションで動作するはずです。 – akhisp

+0

リンクから同じスロットルクラスを使用しました。上記の私のコードを見てください。 –

+0

あなたはアップロードを行うコードを書きませんでしたが、それが動作する方法を変更するために何もできないことは明らかです。 –

答えて

0

はい、ThrottledStreamはWinForms/WPFアプリケーションで使用できます。

+1

私の質問をチェックしてください。どうすればいいですか? –

関連する問題