我正在尝试学习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);
}
};
...
您能向我解释一下如何编写这段代码并使用Runnable吗? 使用这个Runnable来更新gridview适配器并在后台从适配器加载数据到gridview中。如果我尝试在主线程中更新适配器呢?像这样(C#代码):
mAdapter.next()
mLifeGrid.Adapter = mAdapter;
Thread.Sleep(1000);
活动卡住了。 如果我不能使用Runnable,我该如何在新线程中实现适配器和GridView的更新? 如果我使用C#线程,像这样:
...
Thread th = new Thread(new ThreadStart(mUpdatGeneration));
th.Start();
}
public void mUpdateGeneration()
{
mAdapter.next()
mLifeGrid.Adapter = mAdapter;
Thread.Sleep(1000);
}
它生成了一个错误 "System.NullReferenceException"。
感谢所有人的帮助! 附言:对于我的英语我很抱歉 :)
Handler
可能不是一个线程类。它似乎是一个可以用来向主事件队列发送消息的类。 - millimooseHandler
?如果这是一个单一项目,就不应该使用Java的习惯用法。 - Kirk WollHandler.PostDelayed(Action)
的意义有了一定的上限。 - millimoose