我想使用异步工作,但我的方法是从摘要中覆盖,我无法添加"异步任务"那个方法......
这是方法:
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被锁定... 请为上帝的爱帮助我:(
答案 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><</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>></strong>
</div>
</div>
关键字与返回async
,void
或Task
的方法一起使用,因为您的重写方法会返回Task<T>
,您无法使用View
用它。
如果你说的话
Ui被锁定!!!!
您的意思是UI变得没有响应,那么您需要从支持异步调用的地方(例如async
)进行异步调用,或者订阅事件并在那里进行。
例如:
OnResume
另一种选择是不等待异步过程完成,但这取决于您的要求。