-8

これが私の推定タイムコードです。動作していますが、時間に誤りがあります。

if ((DateTime.Now - _startDate).Seconds > 0)
{
    kbPerSecond = (int)((100 * 1000) / 8);
}
long sent = (TotalBytes - BytesRead);
long remainingseconds = sent / kbPerSecond;
string remainingTimeDisplay = string.Empty;
if (remainingseconds > 0)
{
    if (remainingseconds > 60)
    {
        if (remainingseconds > 3600)
        {
            remainingTimeDisplay += ((int)(remainingseconds) / 3600).ToString("n0") + " Hours, ";
            remainingseconds %= 3600;
        }
        remainingTimeDisplay += (((int)remainingseconds) / 60).ToString("n0") + " Minutes,  ";
        remainingseconds %= 60;
    }
    remainingTimeDisplay += ((int)remainingseconds).ToString("n0") + " Seconds remaining";
    lbl_estimate.Text = remainingTimeDisplay;
}

問題は、ダウンロードが完了した後、推定時間がゼロではなく「残り 1 秒」と表示されることです。

私は何を間違っていますか?

4

3 に答える 3

3

remainingseconds0 を超える場合にのみテキストを変更しますelse。最初に行う必要ifがあるため、次のようなものが必要です。

    if (remainingseconds > 0)
                {
                    if (remainingseconds > 60)
                    {
                        if (remainingseconds > 3600)
                        {
                            remainingTimeDisplay += ((int)(remainingseconds) / 3600).ToString("n0") + " Hours, ";
                            remainingseconds %= 3600;
                        }
                        remainingTimeDisplay += (((int)remainingseconds) / 60).ToString("n0") + " Minutes,  ";
                        remainingseconds %= 60;
                    }
                    remainingTimeDisplay += ((int)remainingseconds).ToString("n0") + " Seconds remaining";
                    lbl_estimate.Text = remainingTimeDisplay;
                }
     else
           lbl_estimate.Text = "0 seconds";
于 2013-04-08T08:07:58.617 に答える
1

データレートは一定です

kbPerSecond = (int)((100 * 1000) / 8);

それは正しくありません。

于 2013-04-08T08:01:48.853 に答える
1

これを単純化するには、期間文字列をフォーマットするためのすべてのロジックを抽出する必要があります。そのロジックは、関数の残りの部分と混同されていません!

また、次を使用して簡略化できますTimeSpan

public static string FormatDurationSeconds(int seconds)
{
    var duration = TimeSpan.FromSeconds(seconds);
    string result = "";

    if (duration.TotalHours >= 1)
        result += (int) duration.TotalHours + " Hours, ";

    result += String.Format("{0:%m} Minutes, {0:%s} Seconds", duration);
    return result;
}

これを行うと、秒数が間違っている理由を簡単に確認できるはずです。

于 2013-04-08T08:35:48.783 に答える