Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin MvvmCross中的重初始化操作放在何处_Xamarin_Mvvmcross - Fatal编程技术网

Xamarin MvvmCross中的重初始化操作放在何处

Xamarin MvvmCross中的重初始化操作放在何处,xamarin,mvvmcross,Xamarin,Mvvmcross,在MvvmCross ViewModel中,Init方法用于任何屏幕初始化。但是,在初始化完全完成之前,不会绘制屏幕。我有一些繁重的操作(数据库搜索)。因此,理想情况下,我希望用进度条绘制屏幕,然后运行初始化方法,最后更新屏幕。在MvvmCross ViewModel中,我将把这些操作放在何处?我将在服务中执行繁重的操作。在这项服务中,我会: 创建一个方法,该方法触发一个Done事件,您可以在ViewModel中侦听该事件,并从中用数据填充属性 或 创建一个异步方法,在后台线程上等待该方法

在MvvmCross ViewModel中,Init方法用于任何屏幕初始化。但是,在初始化完全完成之前,不会绘制屏幕。我有一些繁重的操作(数据库搜索)。因此,理想情况下,我希望用进度条绘制屏幕,然后运行初始化方法,最后更新屏幕。在MvvmCross ViewModel中,我将把这些操作放在何处?

我将在
服务中执行繁重的操作。在这项服务中,我会:

  • 创建一个方法,该方法触发一个
    Done
    事件,您可以在
    ViewModel
    中侦听该事件,并从中用数据填充属性

  • 创建一个异步方法,在后台线程上等待该方法,并在它返回时填充属性

当此服务运行并获取数据时,我只需在加载数据时在屏幕上显示其他内容。这可能是一些缓存数据或进度条或其他内容。

+1-尽管有时您需要小心处理“完成”事件,因为如果您从未取消订阅,这可能会导致泄漏-在这些情况下,最好利用弱引用使用消息订阅。但是什么触发服务开始其操作?如果我从init触发它,我不是也有同样的问题吗(因为它不是异步的)?这很有魅力,而且我能够在核心项目服务中完成这一切。。我的服务方法只是使用另一个线程来调用繁重的操作,然后在完成时触发一条消息。ThreadPool.QueueUserWorkItem(state=>{var results=_repository.Find(filter);_messenger.Publish(new SearchCompleteMessage(this,results));});