线程无法正常工作

时间:2013-12-08 21:35:35

标签: android multithreading listview xamarin.android xamarin

我正在使用 Xamarin Studio 来开发Android应用。

该应用应在lvRes(ListView)中生成50个条目。 我的下面的代码示例除了第一次尝试外完全正常。

FindViewById<Button>(Resource.Id.bnCalc)
.Click += (object sender, EventArgs e) => new Java.Lang.Thread(() => {
    ListView lvRes = FindViewById<ListView>(Resource.Id.lvRes);
    ArrayAdapter res = new ArrayAdapter(lvRes.Context, Android.Resource.Layout.SimpleListItem1);
    lvRes.Adapter = res;

    ulong a = 1;
    ulong b = 1;
    ulong tmp;
    int step = 0;

    while (++step <= 50 && (tmp = a + b) < ulong.MaxValue) {
        res.Add(tmp.ToString());
        a = b;
        b = tmp;
    }
}).Start();

首次点击bnCalc(按钮)后,lvRes只获得一个条目。 每次点击bnCalc后,每次点击lvRes都会有50个条目。

1 个答案:

答案 0 :(得分:0)

@ User3805967说,这可能是一个UI问题。所以我设置一个断点来检查,如果while循环工作。循环就像它应该的那样工作。所以我在生成所有数字后尝试将ArrayAdapter传递给ListView。而且效果很好。现在我的代码如下所示:

FindViewById<Button>(Resource.Id.bnCalc)
.Click += (object sender, EventArgs e) => new Java.Lang.Thread(() => {
    ulong a = 1;
    ulong b = 1;
    ulong tmp;
    int step = 0;

    ListView lvRes = FindViewById<ListView>(Resource.Id.lvRes);
    ArrayAdapter res = new ArrayAdapter(lvRes.Context, Android.Resource.Layout.SimpleListItem1);

    try {
        while (++step <= count && (tmp = a + b) < max) {
            res.Add(tmp.ToString());
            a = b;
            b = tmp;
        }
    } catch(System.Exception) {}

    // After generating numbers, I assign the ArrayAdapter to the ListView
    RunOnUiThread(() => lvRes.Adapter = res);
}).Start();