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
Post a Comment