如何在Mono中使用Runnable for android

Bey*_*yka 13 c# xamarin.android runnable

我试着勒芒Monodroid!我尝试重写Java代码到C#并遇到一些问题:我不明白如何使用Runnable.这是Java中的代码,我不能转换为C#:

public class RunActivity extends Activity implements OnClickListener
{
   ...

   private Handler mHandler;

   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.run);
       ... 
       mHandler = new Handler();
       mHandler.postDelayed(mUpdateGeneration, 1000);
   }

   private Runnable mUpdateGeneration = new Runnable()
   {
       public void run()
       {
          mAdapter.next();
          mLifeGrid.setAdapter(mAdapter);

          mHandler.postDelayed(mUpdateGeneration, 1000);
       }
   }; 
   ...
Run Code Online (Sandbox Code Playgroud)

你能解释一下我如何编写这段代码并使用Runnable吗?此Runnable用于更新gridview适配器并在后台从适配器加载数据到gridview.如果我在主线程中尝试更新适配器?像这样(C#代码):

mAdapter.next()
mLifeGrid.Adapter = mAdapter;
Thread.Sleep(1000);
Run Code Online (Sandbox Code Playgroud)

活动停滞不前.如果我不能使用Runnable,我怎样才能在新线程中实现适配器和gridview的更新?如果我使用C#线程,就像这样:

...
Thread th = new Thread(new ThreadStart(mUpdatGeneration));
th.Start();
}
public void mUpdateGeneration()
{
    mAdapter.next()
    mLifeGrid.Adapter = mAdapter;
    Thread.Sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)

它会生成错误"System.NullReferenceException"

感谢所有人的帮助!PS抱歉我的英文:)

mil*_*ose 6

看起来有一个PostDelayed()Action参数的重载,所以直截了当的方法就是这样做:

void UpdateGeneration()
{
    mAdapter.next();
    mLifeGrid.setAdapter(mAdapter);
    mHandler.PostDelayed(UpdateGeneration, 1000);
}

// ...

mHandler.PostDelayed(UpdateGeneration, 1000);
Run Code Online (Sandbox Code Playgroud)

(免责声明:我从未真正使用过MonoDroid,但它应该是有效的.)


Rad*_*scu 5

这是在C#中翻译Runnable实现的方法

private Java.Lang.Runnable mUpdateGeneration = new Java.Lang.Runnable(() =>
{
     mAdapter.next();
     mLifeGrid.setAdapter(mAdapter);
     mHandler.postDelayed(mUpdateGeneration, 1000);
});
Run Code Online (Sandbox Code Playgroud)