【问题标题】:How to call base class constructor in a separate UI thread如何在单独的 UI 线程中调用基类构造函数
【发布时间】:2021-01-10 15:11:20
【问题描述】:

我的基类构造函数需要在单独的线程(即 UIThread)中调用。我期望的是类似于 InvokeOnMainThread(base());而不是 base()

Class BaseClass{
}

Class DerivedClass : BaseClass
{
   public DerivedClass : base()
   {
      ## Constructor
    }
}

请就这种情况向我提出任何解决方案或解决方法。

【问题讨论】:

  • 这是一个奇怪的要求。这个场景是怎么来的?也许您的实际潜在问题是您的代码结构中的设计问题。没有更多的上下文很难知道。但我强烈地闻到了X-Y problem
  • 让我解释一下这个场景。我们有一个从非 UI 线程运行的类,但使用 UiViewController 作为基类。当我们尝试从后台线程实例化 UIViewController 时,它会抛出 UIKIt 异常。为此,我们需要在 UIThread 中调用 UiVIewController 构造函数。
  • 如果类不作为 UI 的一部分运行,为什么需要从 UI 类继承?从表面上看,这没有多大意义。这个类实际上做了什么?

标签: c# ios xamarin constructor uiviewcontroller


【解决方案1】:

当我们尝试从后台线程实例化 UIViewController 时

很遗憾,我们无法在非 UI 线程中实例化 UIKit 对象,也无法使用 UIKit 的实例。

如果代码在后台线程、任务或回调中执行,那么它可能不会在主 UI 线程上执行。

错误信息将显示如下:

为了解决这些问题,一般我们会使用InvokeOnMainThread方法。

InvokeOnMainThread ( () => {
    // manipulate UI controls
});

否则,您可以向 UIThread 发送消息以处理您的需求。比如使用MessagingCenter

【讨论】:

    猜你喜欢
    • 2021-03-14
    • 2018-03-31
    • 2012-01-25
    • 2016-07-19
    • 2014-03-26
    • 2011-02-12
    • 2018-07-16
    • 2018-07-21
    相关资源
    最近更新 更多