RunOnUiThread方法的问题

时间:2019-03-07 10:24:18

标签: c# android xamarin

我面临的问题是我的Xamarin应用程序“ may be doing too much work on its main thread”。为了避免这个问题,我正在尝试使用RunOnUiThread方法将一些繁重的计算移到他们自己的单独线程中。但是,由于无法真正正确地使用它,我目前陷入困境。到目前为止,我认为我必须从当前活动中运行此方法。我尝试通过以下方式获得此活动:

var activity = (Activity)Android.App.Application.Context;

如“ Xamarin.Forms.Forms.Context;”是obsolete。不幸的是,我的代码仅导致以下异常:

  

System.InvalidCastException:指定的转换无效。

因此,我有两个问题:

  1. 如何获取当前活动?
  2. 一旦我有活动,调用RunOnUiThread方法的最佳方法是什么?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您在活动中调用runOnUiThread,请使用此代码

runOnUiThread(new Runnable() {
            @Override
            public void run() {

            }
        });

如果您在片段中调用runOnUiThread,请使用此代码

if (getActivity() != null) 
{
    getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {

        }
    });
}

希望对您有所帮助!

谢谢。

答案 1 :(得分:0)

我终于可以使用以下代码解决此问题:

        Context Context = DependencyService.Get<AndroidPropertyHandler>().GetMainActivityContext();
        var Activity = (Activity) Context;
        Runnable MyRunnable = new Runnable(() => {
            Debug.WriteLine("My work goes here...");
        });
        Activity.RunOnUiThread(MyRunnable);

,其中“ AndroidPropertyHandler”是一个提供对静态上下文的访问的接口。