public void transferDidProgress(Transfer t, TransferProgress tp)
        {
            Progress(tp.getProgress());
            AsyncDelegate d = delegate
            {
                double transferred = _transfer.getTransferred().longValue();
                double size        = _transfer.getSize().longValue();
                if (transferred > 0 && size > 0)
                {
                    View.ProgressIndeterminate = false;
                    // normalize double to int if size is too big
                    if (size > int.MaxValue)
                    {
                        View.ProgressMaximum = int.MaxValue;
                        View.ProgressValue   = Convert.ToInt32(int.MaxValue * transferred / size);
                    }
                    else
                    {
                        View.ProgressMaximum = Convert.ToInt32(size);
                        View.ProgressValue   = Convert.ToInt32(transferred);
                    }
                }
                else
                {
                    View.ProgressIndeterminate = true;
                }
                UpdateOverallProgress();
            };

            invoke(new SimpleDefaultMainAction(this, d));
        }