在单独的线程Xamarin中从后台服务中调用PCL中的方法

时间:2017-11-23 11:04:15

标签: c# multithreading xamarin xamarin.android

我的PCL中定义了一个方法PostToWebAPI。我在我的Android项目中实现的后台服务中调用了这个方法,如下所示:我的场景如下:

[return: GeneratedEnum]
public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
    {

    Toast.MakeText(this, "BackgroundService started..", ToastLength.Long).Show();

    Task.Factory.StartNew(() => DoBackgroundJob(), TaskCreationOptions.LongRunning);

    base.OnStartCommand(intent, flags, startId);
    return StartCommandResult.Sticky;

}


public async void DoBackgroundJob()
{
   // An instance of he class in my PCL to invoke the method PostToWebAPI
    WebServiceAPI webApi = new WebServiceAPI();
    await webApi.PostToWebAPI("Nissan", "2003");
}

我的方案如下:

  1. 手动启动时,应用会执行相同的操作。启动时,它会将数据发送到PostToWebAPI
  2. 我在应用程序中实现了Service,更具体地说是在启动设备启动时触发的Android项目中。如上所示,Service会调用Task.Factory.StartNew(() => DoBackgroundJob(), TaskCreationOptions.LongRunning);
  3. 由于这是一项持续的服务,当我手动启动我的应用时,它会阻止我的应用的用户界面。
  4. 我的问题是如何在Service运行时避免阻止用户界面?即使手动启动应用,也应该发布运行的应用和Service的数据。请帮忙。

0 个答案:

没有答案