2013-12-08 86 views
0

我正在使用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

没有你试图把一个破发点的同时,因为我认为这是一个UI问题,而不是线程问题 –

+0

为什么有一个线程? – zapl

+0

我没有尝试设置断点,我希望应用程序在后台生成数字以防止冻结的用户界面。 – Cubinator73

回答

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