Делай, что говорит, и звони Looper.prepare()
:
void MethodToRun() {
Looper.prepare();
//...
}
Однако у вас есть другие проблемы. Вы не можете создать новый экземпляр Activity самостоятельно. Если вы хотите что-то запустить в основном потоке, создайте новый обработчик:
var handler = new Handler(Looper.GetMainLooper());
И тогда вы можете написать с ним:
handler.Post(() => {
int number = Get_Number();
//...
}
Однако, если вы хотите запустить повторяющееся действие в главном потоке, то именно то, что вы делаете, - именно то, чего не было создано обработчиками.
Попробуйте что-то вроде этого:
var handler = new Handler(Looper.GetMainLooper());
Runnable actions = new Runnable() => {
int number = Get_Number(); //this needs to be async
handler.Post(() => {
TextView text = v.FindViewById(Resource.Id.textView);
text.Text = number == 1 ? "1" : "Not 1 anymore";
PostAction();
}
}; //the syntax for this might be wrong, since I don't know C#
void PostAction() {
handler.postDelayed(() => {
new Thread(actions).start();
}, 1000);
}
Таким образом, вам просто нужно позвонить PostAction()
один раз, чтобы все заработало, и тогда он будет повторять вашу логику.
Если вы хотите остановить цикл:
handler.RemoveCallbacks(actions);