MonoTouch 中的线程

在 MonoTouch 中, 可以使用标准的 .Net 线程 API , 既可以直接使用线程(System.Threading.Thread、System.Threading.ThreadPool), 也可以简介使用异步委托模式以及 BeginXXX 、 EndXXX 方法。

最好使用 Mono 的线程池, 这样,系统的开销增加的非常缓慢, 充分利用多核来平衡系统的负载以及程序的需求。 可以通过调用 System.Threading.ThreadPool 的方法或者使用默认的 System.Threading.Tasks.TaskScheduler (Parallel Framework 的一部分) 来使用线程池。

通常, 当开发者需要创建即时响应界面并且不希望阻塞主界面的程序时, 需要用到线程。

开发即时响应的应用

对界面元素的操作必须限制在运行主界面循环的线程, 如果需要线程中对界面做修改, 则必须使用 NSObject.InvokeOnMainThread 把代码添加到队列, 例如:

1
2
3
4
5
6
7
MyThreadedRoutine() {
    var  result = DoComputation();
    // 计算完成之后, 需要更新界面, 需要保证操作界面的代码一定是在主界面线程执行
    InvokeOnMainThread( delegate  {
       label.Text = "The result is: "  + result;
    });
}

上面的委托中的代码会在主界面线程的上下文中执行, 没有任何竞争条件, 不会导致程序崩溃。

线程与垃圾回收

Objective-C 运行时会在执行的过程中创建和销毁对象, 如果对象被标记为 “auto-release” , Objective-C 运行时将会把这些对象放到线程当前的 NSAutoReleasePool 进行销毁。 MonoTouch 为主界面线程以及每个由 ThreadPool 创建的线程分配一个 NSAutoReleasePool, 当然也包括用默认 TaskScheduler 创建的 Task 。

如果需要创建自己的线程, 则必须也提供一个 NSAutoReleasePool 来防止内存泄漏, 如果要这样做的话, 用下面的代码包含你的代码即可:

1
2
3
4
5
void  MyThreadStart( object  arg) {
    using  ( var  ns = new  NSAutoReleasePool()) {
       // Your code goes here.
    }
}

张志敏所有文章遵循创作共用版权协议,要求署名、非商业 、保持一致。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

本博客已经迁移到 GitHub , 围观地址: http://beginor.github.io/

本文转自张志敏博客园博客,原文链接:http://www.cnblogs.com/beginor/archive/2011/10/18/2216766.html ,如需转载请自行联系原作者
优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/380202

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。