【问题标题】:How to Wait for Handler Thread to finish in Xamarin Android?如何在 Xamarin Android 中等待处理程序线程完成?
【发布时间】:2018-11-17 19:29:00
【问题描述】:

如何在函数继续之前等待handler.PostDelayed 完成?

    int num = null;
    public int DoSomething()
    {

            var handler = new Handler();
            handler.PostDelayed(() => StartCapital(), 10);

            handler.PostDelayed(() =>
            {
                    num = StartGain();
            }, 300);

           return num;
     }

如何以WaitStartGain() 方法线程完成?该方法需要一些时间才能完成,并且它所在的函数返回 null

【问题讨论】:

  • 如果要等待命令完成,为什么要从另一个线程调用该方法?
  • 这需要时间,我不希望UI被挂
  • 您必须使用新的可运行对象创建一个线程并将其传递给处理程序以使其在后台工作,现在您只是在该代码段上添加延迟
  • 延迟不是问题,问题是函数在返回整数值之前完成,这使得返回值为空
  • @VINNUSAURUS - 你可以试试这个Task.Run(async () => { await StartGain(); }).Wait();

标签: java c# android xamarin xamarin.android


【解决方案1】:

这看起来像是理解线程工作方式的问题,您创建了一个后台线程,这样您就不必阻塞主线程来完成一些巨大的进程来完成许多其他用途,

就像您的情况一样,方法StartGain() 将在延迟 300 毫秒后在主线程上执行,因此如果您不想等待,请删除延迟和处理程序并在正常流程上运行它。如果进一步计算需要该方法返回的值,则在继续之前在单独的后台线程中运行它。

【讨论】:

  • 如果我删除延迟 StartCapital() 函数有时会在 StartGain() 之后结束,这会导致问题
  • 我理解所以不要将它移动到后台线程中,而是在你的主线程上运行它,因为它是流程需要的,这是合理的延迟,你可以使用不同的线程来提前获得这个值时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多