2017-04-04 15 views
1

ファイルを要求している間に重みを追加するコードを実装し、FTP経由でファイルをダウンロードしたときに追加された重みを減算する必要があります。変数(count_server)が開始時の値と等しくない

私は論理を誤解していますが、わかりませんでした。

現在、何が起きているのか、count_server1/count_server2/count-server3にはいくらかの金額が残っており、最後には0には達しません。

割り当てられた実際の重量は差し引かれていないことを意味します。そのため、これらの変数には何らかの価値が残っています。

これらの変数値を使用してプログレスバーを設定しています。

コメントご質問がありません。

protected void start_download() 
{ 
    //Other actions 
    for (int i = 1; i <= filecount; i++) 
    { 
     balance_load(filename, trnsfrpth); 
    } 
} 

protected void Timer1_Tick(object sender, EventArgs e) 
     { 
      e1.Style.Add("width", count_server1 + "%"); 
      e1.InnerHtml = count_server1.ToString(); 
      e2.Style.Add("width", count_server2 + "%"); 
      e2.InnerHtml = count_server2.ToString(); 
      e3.Style.Add("width", count_server3 + "%"); 
     } 

int weight; 
public void count_weight() 
{ 
    if (extension == ".jpeg" || extension == ".bmp" || extension == ".jpg" || extension == ".gif" || extension == ".png") 
    { 
     weight = 1; 
    } 
    if (extension == ".mp3") 
    { 
     weight = 5; 
    } 
    if (extension == ".mp4" || extension == ".avi" || extension == ".mov" || extension == ".mkv" || extension == ".wmv" || extension == ".flv") 
    { 
     weight = ((int)filesize/2); 
    } 
} 

int P; 
public void balance_load(string filename, string trnsfrpth) 
{ 
    count_weight(); 
    P = weight; 

    if ((count_server1 <= count_server2) && (count_server1 <= count_server3)) 
    { 
     //FTP request creation and providing credentials 
     count_server1 += P; 
     ftpClient_s1.DownloadFileCompleted += DownloadFileCompleted_s1(); 
     ftpClient_s1.DownloadFileAsync(new Uri(path), trnsfrpth); 
    } 
    else if (count_server2 <= count_server1 && count_server2 <= count_server3) 
    { 
     //FTP request creation and providing credentials 
     count_server2 += P; 
     ftpClient_s2.DownloadFileCompleted += DownloadFileCompleted_s2(); 
     ftpClient_s2.DownloadFileAsync(new Uri(path), trnsfrpth); 
    } 
    else if (count_server3 <= count_server1 && count_server3 <= count_server2) 
    { 
     //FTP request creation and providing credentials 
     count_server3 += P; 
     ftpClient_s3.DownloadFileCompleted += DownloadFileCompleted_s3(); 
     ftpClient_s3.DownloadFileAsync(new Uri(path), trnsfrpth); 
    } 
    else 
    {} 
} 

public AsyncCompletedEventHandler DownloadFileCompleted_s1() 
{ 
    Action<object, AsyncCompletedEventArgs> action = (sender, e) => 
    { 
     count_server1 -= P; 
    }; 
    return new AsyncCompletedEventHandler(action); 
} 

public AsyncCompletedEventHandler DownloadFileCompleted_s2() 
{ 
    Action<object, AsyncCompletedEventArgs> action = (sender, e) => 
    { 
     count_server2 -= P; 
    }; 
    return new AsyncCompletedEventHandler(action); 
} 

public AsyncCompletedEventHandler DownloadFileCompleted_s3() 
{ 
    Action<object, AsyncCompletedEventArgs> action = (sender, e) => 
    { 
     count_server3 -= P; 
    }; 
    return new AsyncCompletedEventHandler(action); 
} 

答えて

0

私は解決策を見つけました。

代わりに値を割り当て、それを「アクション」で直接使用すると、最初に値を割り当てることができ、後で使用することができます。問題は値のオーバーライドを伴う可能性があります。

public AsyncCompletedEventHandler DownloadFileCompleted_s1() 
{ 
    int P_temp=P; 
    Action<object, AsyncCompletedEventArgs> action = (sender, e) => 
    { 
     count_server1 -= P_temp; 
    }; 
    return new AsyncCompletedEventHandler(action); 
} 

同じこと

AsyncCompletedEventHandler DownloadFileCompleted_s2() 
AsyncCompletedEventHandler DownloadFileCompleted_s3() 
のために:

ので、 むしろこの

public AsyncCompletedEventHandler DownloadFileCompleted_s1() 
{ 
    Action<object, AsyncCompletedEventArgs> action = (sender, e) => 
    { 
     count_server1 -= P; 
    }; 
    return new AsyncCompletedEventHandler(action); 
} 

よりも、私はこれにコードを変更しました

関連する問題