我面临的问题是我的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:指定的转换无效。
因此,我有两个问题:
非常感谢您的帮助。
答案 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”是一个提供对静态上下文的访问的接口。