c# - How can i disable a button using a System.Timers.Timer in monodroid? -


i using monodroid making android app. want disable button in view after 3 seconds. using following code:

 t = new system.timers.timer();  t.interval = 3000;  t.elapsed += new system.timers.elapsedeventhandler(t_elapsed);  t.start();    protected void t_elapsed(object sender, system.timers.elapsedeventargs e)  {     try{        t.stop();        button.enabled = false;     catch(){        console.writeline("exception: "+ex);            }  } 

because of code getting following exception:

 android.util.androidruntimeexception: exception of type 'android.util.androidruntimeexception' thrown.  @ android.runtime.jnienv.callvoidmethod (intptr jobject, intptr jmethod, android.runtime.jvalue[] parms) [0x00023] in /users/builder/data/lanes/monodroid-mlion-monodroid-4.8.0-branch/3f1c339b/source/monodroid/src/mono.android/src/runtime/jnienv.g.cs:368   @ android.views.view.set_enabled (boolean value) [0x00043] in /users/builder/data/lanes/monodroid-mlion-monodroid-4.8.0-branch/3f1c339b/source/monodroid/src/mono.android/platforms/android-8/src/generated/android.views.view.cs:2341   @ myproject.mainactivity.t_elapsed (system.object sender, system.timers.elapsedeventargs e) [0x0001e] in /users/piscean/documents/xamarin development/myproject/myproject/mainactivity.cs:361   --- end of managed exception stack trace ---  android.view.viewrootimpl$calledfromwrongthreadexception: original thread created view hierarchy can touch views. @ android.view.viewrootimpl.checkthread(viewrootimpl.java:4607) @ android.view.viewrootimpl.invalidatechildinparent(viewrootimpl.java:867) @ android.view.viewgroup.invalidatechild(viewgroup.java:4066) @ android.view.view.invalidate(view.java:10193) @ android.widget.textview.invalidatedrawable(textview.java:4584) @ android.graphics.drawable.drawablecontainer.invalidatedrawable(drawablecontainer.java:250) @ android.graphics.drawable.drawable.invalidateself(drawable.java:350) @ android.graphics.drawable.drawable.setvisible(drawable.java:546) @ android.graphics.drawable.drawablecontainer.selectdrawable(drawablecontainer.java:307) @ android.graphics.drawable.statelistdrawable.onstatechange(statelistdrawable.java:106) @ android.graphics.drawable.drawable.setstate(drawable.java:462) @ android.view.view.drawablestatechanged(view.java:13998) @ android.widget.textview.drawablestatechanged(textview.java:3164) @ android.view.view.refreshdrawablestate(view.java:14012) @ android.view.view.setenabled(view.java:5543) @ android.widget.textview.setenabled(textview.java:1201) @ dalvik.system.nativestart.run(native method) 

any idea how can disable button after 3 seconds. in advance.

the key line: "only original thread created view hierarchy can touch views."

since timer running on background thread, if want modify ui you'll need use activity's runonuithread method.

 protected void t_elapsed(object sender, system.timers.elapsedeventargs e)  {     try{        t.stop();        mainactivity.runonuithread(() => { button.enabled = false; });     catch(){        console.writeline("exception: "+ex);            }  } 

Comments

Popular posts from this blog

matlab - Deleting rows with specific rules -

php - MySQLi multi_query results for later use -