Обновите ProgressBar соответствующим значением - PullRequest
4 голосов
/ 26 февраля 2012

Не силен в математике, вот моя проблема:

Я использую индикатор выполнения, чтобы показать ход выполнения работы в фоновом режиме:

Фрагмент моего кода:

            int i = 0;
            int totalFriends = 0;

            foreach (dynamic friend in facebookFriends)
            {
                totalFriends++;
            }

            foreach (dynamic friend in facebookFriends)
            {
                i++;

                var friend = new FacebookFriend
                {
                    FbId = friend["uid"].ToString()
                };

                AccountFacebookFriendRepository.SaveOrUpdate(accountFriend);
            }

Теперь приложение делает намного больше, и здесь я выполняю лишь небольшую часть работы: так, например, до того, как я попал в этот раздел, индикатор выполнения имел значение 7, а после выполнения работы он должен достигать 20и я хочу обновить его, выполняя работу с соответствующими значениями от 7 до 20:

Мое предположение следующее:

var intiProgressbarValue = 7;
var finalProgressbarvalue = 20;

foreach (dynamic friend in facebookFriends)
{
    i++;
    var friend = new FacebookFriend
                     {
                         FbId = friend["uid"].ToString()
                     };
    AccountFacebookFriendRepository.SaveOrUpdate(accountFriend);
    var calculatedValue = CalculatedValue(initProgressbarValue, finalProgressBarValue,totalFriends, i);
    UpdateProgressBar( calculatedValue);
}
//note that totalFriends can be any number lets say from 0 to 5000
private int CalculatedValue(int initVal, int finalVal, int totalFriends, int currentFriend)
{
    int progressBarVal = 0;
    //** 
       Perform logic so it will return a progress value that is bigger that 7 and smaller that 20 depending on the number of friends and currently updated friend
    **//
    progressBarVal  = 8;//this would be the result of calculation, a value from 8 to 20
    return progressBarVal;
}

Любая помощь с благодарностью:

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Вы можете использовать формулу

progressBarVal = initVal + (finalVal - initVal) * (currentFriend/totalFriends);

Чтобы проверить математику, рассчитайте progressBarVal, если currentFriend равно 0:

initVal + (finalVal - initVal) * 0 = initVal

, а когда currentFriend равно totalFriends:

initVal + (finalVal - initVal) * 1 = finalVal
3 голосов
/ 26 февраля 2012

Попробуйте это:

private int CalculatedValue(int initVal, int finalVal, int totalFriends, int currentFriend)
{
    initVal++;
    var diff = finalVal - initVal; // 20-8 = 12
    return (diff*(currentFriend+1))/totalFriends + initVal;
}

Предполагается, что currentFriend изменяется с 0 на totalFriends-1 включительно. Например, если currentFriend = 99 и totalFriends = 300, ответ, который возвращает эта функция, равен 12, на одну треть в диапазоне от 8..20 (включительно).

...