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)); }