Alpha チャネルから Xamarin.iOS を実行する余裕がある場合は、C#5 async/await にアクセスできます。タスクとコールバックの複雑さをうまく隠しています。
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
muButton.TouchUpInside += DoSomething;
}
async void DoSomething (object o, EventArge e)
{
myLabel.Text = "Starting";
for (var i = 0; i<10;i++)
{
await ProcessPart(i);
myLabel.Text = String.Format ("Progress : {i}0%", i+1);
}
myLabel.Text = "Done";
}
Task ProcessPart (int i)
{
Task.Delay (1000);
}
あなたの処理がそれ自体の進行状況を報告するのに十分なほどスマートである場合、その署名をに変更して、次のIEnumerable<Task<int>> Process ()
ような素敵な更新ループを作成できます。
async void DoSomething (object o, EventArge e)
{
foreach (var tp in Process())
myLabel.Text = String.Format ("Progress : {i}0%", await tp +1);
}
ダミーの Process() 関数は次のようになります。
IEnumerable<Task<int>> Process ()
{
for (var i=0; i<10; i++)
yield return Task.Delay (1000).ContinueWith(x => i);
}