使用Async Modifire作为抽象方法

时间:2016-12-21 09:37:00

标签: c# asynchronous xamarin.android

我想使用异步工作,但我的方法是从摘要中覆盖,我无法添加"异步任务"那个方法......

这是方法:

public  override View  OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    var _view=something;
    await dosomthing();
    return _view;
}

// ---------------------------- 你可以看到我想做那样的事...... 到目前为止我能找到的唯一方法就是这个(看下面的代码)

public  override View  OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    var _view=null;
    var mytsk = Task<View>.Run(async () =>
    {
        var _view=something;
        await dosomthing();`
    });

    //I dont know where should i return my "_view" that my Ui thread dosent gets locked
}

如果任务完成后我写了#34; mytsk.result&#34;然后我的Ui被锁定!!!! 如果我使用(代码以下)

var _view=null;

var mytsk = Task<View>.Run(async () =>
{
    var _view=something;
    await dosomthing();`
}).wait();

return _view;

然后我的UI被锁定... 请为上帝的爱帮助我:(

2 个答案:

答案 0 :(得分:1)

所有UI更新必须是同步的。当平台向您的应用询问视图时, 必须 立即返回视图。你的应用试图在我做某事时坚持一段时间,然后我会告诉你要显示的内容&#34;,这是不允许的。

要解决这个问题,你需要引入一些&#34; loading&#34;视图 - 例如,仅使用占位符或微调器或其他东西。当您的应用程序被要求提供视图时,您可以启动异步操作,然后返回&#34; loading&#34;视图。稍后,当该操作完成后,您的应用可以视图更新到&#34;真实&#34;图。

答案 1 :(得分:-1)

您只能将<h3>Presentation Slider</h3> <div id="wrapper"> <div id="left-button" class="arrow"> <strong>&lt;</strong> </div> <!-- <div id="slide1"></div> <div id="slide2"></div> <div id="slide3"></div> <div id="slide4"></div> <div id="slide5"></div> --> <div id="right-button" class="arrow"> <strong>&gt;</strong> </div> </div>关键字与返回asyncvoidTask的方法一起使用,因为您的重写方法会返回Task<T>,您无法使用View用它。

如果你说的话

  

Ui被锁定!!!!

您的意思是UI变得没有响应,那么您需要从支持异步调用的地方(例如async)进行异步调用,或者订阅事件并在那里进行。 例如:

OnResume

另一种选择是不等待异步过程完成,但这取决于您的要求。