On Feb 20, 2012, at 11:50 AM, Chris Tacke wrote: > I've moved to something a bit simpler that, from initial tests anyways, > appears to work. Does this seem reasonable though (I think it assumes that > the UIInvoker class itself is created on the UI thread): > > public class UIInvoker : DisposableBase > { > private Activity m_activity = new Activity(); > > public void Invoke(Delegate method) > { > m_activity.RunOnUiThread(delegate > { > method.DynamicInvoke(null); > }); > }
I wouldn't suggest this solution, as this avoids a great deal of Activity initialization; you have a "half-baked" Activity instance. (For those reading along at home, Activity.attach() is never invoked; Activity.attach() is called in android.app.ActivityThread, which requires that you go through the Context.startActivity() infrastructure, which `new Activity()` obviously doesn't.) That said, it works...because Activity.runOnUiThread() doesn't use Activity.mUiThread for anything except reference comparison, but I have no idea how long that will be the case. What I would instead suggest is: public void Invoke(Delegate method) { using (var handler = new Android.OS.Handler(Android.OS.Looper.MainLooper)) handler.Post(delegate { method.DynamicInvoker(null); }); } - Jon _______________________________________________ Monodroid mailing list Monodroid@lists.ximian.com UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid