【问题标题】:Xamarin DependencyService.Get in a background thread. Best practice?Xamarin DependencyService.Get 在后台线程中。最佳实践?
【发布时间】:2020-11-20 00:57:10
【问题描述】:

我有一个适用于 iOS 和 Android 的 Xamarin Forms 项目。我正在使用蓝牙诊断适配器连接到车辆,该车辆具有用于每个通信平台的本机库。在我的主要项目中,我有一个后台工作人员,每当我想查看消息时,我都会启动和停止它。在该线程内(基本上是一个读取和处理任何新消息的循环),我调用 DependencyService.Get 来读取消息。尽管我看到了时间问题(丢失的消息),但这一切都“工作正常”,我很确定这是由于该线程内部发生了数百个 DependencyService.Get 调用(我在本机 iOS/ 中看不到这种行为) Android Xamarin 项目)。有一个更好的方法吗?由于我需要将此代码移动到每个平台中吗?那会很糟糕,因为这将是很多代码重复。感谢您提供任何见解/帮助。

【问题讨论】:

  • 您应该只需要调用一次 Get() - 这将获取您对本机服务的引用。然后,您可以使用该引用来调用该服务上您需要的任何方法。
  • 另外段落换行符在stackoverflow上是免费的
  • 谢谢杰森,我应该从一开始就做的好建议。不幸的是,我仍然看到时间问题(约 400 毫秒延迟,这足以摆脱通信时间)。我想我会尝试将此代码移动到平台项目中,看看它是否有所改进或我的问题出在其他地方。
  • 您应该减少 DependencyService.Get 调用的次数。
  • 放下一个标志来检查get调用是否被调用

标签: c# xamarin xamarin.forms xamarin.android xamarin.ios


【解决方案1】:

我将后台工作程序代码移到了 iOS 项目中,但仍然看到时间问题。因此它与 DependencyService 无关。

感谢您的帮助,我确实知道我应该只创建一个对 Dependency.Get 调用的引用。 :)

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多