I have a procedure to run Toast:
protected void MakeToast(string toastText) { var toast = Toast.MakeText(this, toastText, ToastLength.Long); toast.SetGravity(GravityFlags.Center, 0, 0); toast.View.SetPadding(10, 10, 10, 10); toast.View.SetBackgroundColor(Android.Graphics.Color.ParseColor("#0066FF")); var toastView = (ViewGroup)toast.View; if (toastView.ChildCount > 0 && toastView.GetChildAt(0) is TextView) { TextView tv = (TextView)toastView.GetChildAt(0); tv.SetTypeface(null, Android.Graphics.TypefaceStyle.Bold); tv.SetTextSize(Android.Util.ComplexUnitType.Sp, 15); } toast.Show(); }
And it usually works...but...when it precedes a long-running and CPU intensive procedure, it often doesn't show. Or it shows when the procedure has run and then it shows "Working" and immediately, "Completed". Since the app is unresponsive when this long running procedure starts, I really want the user to know pressing the button works. Is there anything I can do about this?
Answers
try this code........
await Task.Run(() =>
{
this.RunOnUiThread(() =>
{
MakeToast("toastText") //your toast method call
});
Where do you call the method
MakeToast
? In background thread or a asynchronous task ?If in background thread , try the workaround .
If in asynchronous task , wrap the method into
RunOnUiThread
like @suraj007 said.make a asynchronous task.
This is what I have:
It directly precedes the initiation of the long-running task and Working does not appear. It will appear if the longrunnign task doesn't run very long. The task is dependant on the data submitted to it.
What also happens is "Working" often comes after "Completed". I know I'm making some kind of error, just can't figure out what. The user pushes a button which, after some tests, initiates a long running task. Before the task starts I use toast to announce to the user the work has begun. I wouldn't mind the button changing shape or the button text changing. I tried that but it also didn't work.
The task initiation is from MainActivity.
Is there another way to alert the user that the button push started something?
I disable the button after it is pushed.
But I tried this kind of function:
the btnEmail initiates the sendEmail( ) procedure.
In this procedure, I go:
btnEmail.Enabled=false;
but the button can still be pushed.
SO....????