一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

EJB

EJB是sun的服务器端组件模型,设计目标与核心应用是部署分布式应用程序。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。 1.SessionBean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session   EJB Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。 2.Entity Bean是域模[1]型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。 3.MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。 EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品。

龙生   24 Jan 2014
View Details

MyEclipse

MyEclipse,是在eclipse 基础上 加上自己的插件,而eclipse是用纯java写的,是一个十分优秀的用于开发Java, J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。 MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate[1]。 MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。[1] 根据官方最新消息,MyEclipse 2013已经正式发布!MyEclipse 2013[2]支持HTML5、JQuery和主流的Javascript 库。随着MyEclipse 2013支持Html5,你可以添加音频、视频和API元素到你的项目,从而为移动设备创建复杂的Web应用程序。你甚至还可以通过HTML5 可视化设计器设计令人难以置信的用户界面。同时,随着MyEclipse 2013支持JQuery,你可以通过插件提升性能,并添加动画效果到设计中。

龙生   24 Jan 2014
View Details

格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错

在公司的一个项目里用到了WCF,当传输大量数据时总提示下面的错误,于是百度。看了所有的教程都没有解决问题,同事说你把binding的name去掉试试——问题完美解决。 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: strWhere。InnerException 消息是“反序列化对象 属于类型 System.String 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。 行 1,位置 54208。”。有关详细信息,请参见 InnerException。 以下代码放到服务端即可: <bindings> <basicHttpBinding> <binding maxReceivedMessageSize="2147483647"> <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="None" /> </binding> </basicHttpBinding> </bindings>

龙生   20 Jan 2014
View Details

下拉框Html.DropDownList 和DropDownListFor 的常用方法

一、非强类型: Controller: ViewData["AreId"] = from a in rp.GetArea() select new SelectListItem { Text=a.AreaName, Value=a.AreaId.ToString() }; View: @Html.DropDownList("AreId") 还可以给其加上一个默认选项:@Html.DropDownList("AreId", "请选择"); 二、强类型: DropDownListFor常用的是两个参数的重载,第一参数是生成的select的名称,第二个参数是数据,用于将绑定数据源至DropDownListFor Modle:    public class SettingsViewModel { Repository rp =new Repository(); public string ListName { get; set; } public  IEnumerable<SelectListItem> GetSelectList() { var selectList = rp.GetArea().Select(a => new SelectListItem { Text=a.AreaName, Value=a.AreaId.ToString() }); return selectList; } } Controller:        public ActionResult Index() { return View(new SettingsViewModel()); } View: @model Mvc3Applicationtest2.Models.SettingsViewModel @Html.DropDownListFor(m=>m.ListName,Model.GetSelectList(),"请选择") 转自:http://blog.csdn.net/w809026418/article/details/6740496

龙生   18 Jan 2014
View Details

无法在Web服务器上启动调试。调试器无法连接到远程计算机。原因可能是远程计算机不存在或防火墙阻止与远程计算机通信。

解决办法:   步骤 1: 先检查一下hosts文件有没有改好(默认路径:C:\WINDOWS\system32\drivers\etc) 添加一个新的重定向: 如:127.0.0.1  www.static.building.check.com   步骤 2: 禁用环回检查 请遵循以下步骤: 1. 打开注册表编辑器(单击 开始 ,单击 运行, 类型 regedit然后单击“确定”)。 2. 中注册表编辑器, 找到并单击以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 3. 右击 Lsa ,指向“新建”,然后单击 DWORD 值 。 4. 类型 DisableLoopbackCheck,然后按“Enter” 5. 右击 DisableLoopbackCheck,然后单击“修改” 6. 在“数值数据”框中,键入“1”然后单击“确定” 7. 退出注册表编辑器,并重新启动计算机。 (可以不重启计算机) 步骤 3: 指定主机名 要指定主机名, 映射到环回地址并可连接到 Web 站点上,请按照下列步骤: 1. 打开注册表编辑器(单击“开始”,单击“运行”,类型“regedit”然后单击“确定”)。 2. 中注册表编辑器, 找到并单击以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0 3. 右击“MSV1_0”,指向“新建”,然后再单击“多字符串值”。 4. 类型 BackConnectionHostNames,然后按“Enter”。 5. 右击 BackConnectionHostNames,然后单击“修改”。 6. 在“数值数据”框中, 键入主机名或主机名为站点所在的本地计算机名称,“确定”。 7. 退出注册表编辑器, 并重新启动 IISAdmin 服务。   PS:无法在 Web 服务器上启动调试。与 Web 服务器通信时出现身份验证错误   在 IIS 6.0 中配置集成 Windows 身份验证 0(共 1)对本文的评价是有帮助-评价此主题   集成 […]

龙生   17 Jan 2014
View Details

2014年值得关注的9项技术

Andrew C. Oliver是一位专业的软件咨询师。他从8岁起开始编程,从Basic与dBase III+开始。他最为人所熟知的就是创建了POI项目,该项目现在托管在Apache上。在Red Hat收购JBoss之前,他还是JBoss的早期开发者之一。Andrew是Open Source Initiative的前董事会成员以及现在的顾问。除此之外,Andrew还是Open Software Integrators的董事长与创建者,这是一家专业的服务机构,分布在达拉谟、北卡罗来纳州以及芝加哥。近日,Andrew撰写了一篇文章,谈到了2014年值得关注的9项技术。 2014年充满了各种预测,我们无法控制世界未来的样子,不过我们可以成为自身命运的主人。下面就是2014年值得关注的9项技术,与你一同分享。 1. 文档数据库 很多IT系统基本上都包含了将数据结构写到结构化存储这一部分,同时又要求高并发的性能。文档数据库出现已经有很多年了,其中就有Lotus Domino的Notes Storage Facility,不过NoSQL与大数据革命又燃起了新的领域,其中MongoDB与Couchbase就是其中的佼佼者。 2. 键值存储 有时,你有一张很大的表,可以放到内存中。如果是网格,那么你就可以将内存中的表分发到多个结点上以加快写的速度。如果是个读多写少的小表,那么你可以将其复制到所有结点上,这样读就是个内存中的事情了。无论采用哪种方式,键值存储都值得你好好学习一下。几乎所有的键值存储都可以创建自定义的缓存负载器或是缓存存储,从而实现对RDBMS或是其他数据源的读与写。很多键值存储采用了“稍后写”或是队列写来实现对数据库的写操作。这个领域的典型代表是Couchbase、Memcached、Infinispan与GemFire。 3. 图数据库 从推荐引擎到社交网络和地理分析,再到生物分析,图数据库都带来了极大的便利性。对于传统的RDBMS来说,朋友的朋友这种查询是非常低效的,即便利用最新的特性也没有太大的起色,这是因为其结构就不对。虽然图数据库已经出现了很多年,不过只是最近的数据爆发以及个性推荐等领域才使其变得更加流行。这个领域的典型代表是Neo4j与Apache Giraph。 4. Google Drive/Apps Google Apps是个办公效率套件。我无法想象再回到原来的通过邮件发送附件的那种方式。最近,我们通过基于JavaScript的宏实现了越来越好的自动化。所有的一切都存储在云端,因此我们可以放心地睡觉。除此之外,可扩展性特性意味着只要我们能够访问云端,那么我们就可以将文档直接与其集成,反之亦然。 5. On-premises搜索 我现在还是能看到有很多人在编写着大量的and/or/like等SQL查询,其实这么做不仅会导致严重的性能问题,还会产生不清晰的代码以及不易使用的接口。这时可以看看Google的服务,无论是数据库、文档还是各种文件系统都行。Apache Solr值得你好好看看。 6. PaaS 无论是公有云还是自己的私有云,你都需要手工安装各种操作系统、应用服务器与应用,然后提前选择好将要部署的服务器与VM数量,这是十几年前的做法。PaaS是未来的趋势,能够做到实时伸缩,自动完成重复性的任务。我们所广泛使用的平台有CloudFoundry、CloudBees与OpenShift。 7. 云IDE 前不久,我们全家在打扫壁橱,我9岁的孩子不认识壁橱里面的一个很大的金属盒子到底是什么,那是什么呢?我们在隔壁房间看着我们的孩子。“我不知道,好像是个Dell的什么东西”。我们发现他确实不知道塔式机箱到底是什么,因为自从他出生以来,我们就一直在使用着笔记本(不过他看到过一台1U服务器,因为我们用它做过Hadoop的测试)。我觉得云IDE可以做到一点,那就是让下一代不知道笔记本到底是什么。为何要在硬盘上安装IDE呢?为什么不打开浏览器,然后就开始编码呢?比如说Codenvy或是Cloud9。 8. Hadoop 无论是使用MapReduce进行复杂的分析,抑或只是想做些日志分析和审计日志,Hadoop都是这个行业中最为火热的一个选择。如果你尚未使用Hadoop做过一些试点项目,那么今年就要考虑做做了。如果已经使用过Hadoop,那么我希望你能在今年对Hadoop有更好的了解与掌握。 9. 集群/分布式文件系统 从集群到HDFS,可伸缩性存储是关键。今年,你要重新思考SAN了。至少,如果还没有尝试过可以先做个试水。我预测会有很多混合方式出现。 转自:http://www.infoq.com/cn/news/2014/01/9-popular-technologies-2014

龙生   17 Jan 2014
View Details

亚马逊公有云落地中国 阿里、腾讯等迅速降价

亚马逊公有云落地中国 阿里、腾讯等迅速降价 本报记者纪佳鹏北京报道 12月18日,亚马逊公有云服务AWS(AmazonWebServices)宣布即将推出中国云计算平台。中国是AWS在亚太地区的第4个区域,全球的第10个区域。这意味着长期传闻入华的亚马逊AWS正式在国内落地。 而就在AWS落地中国的同一天,IBM也宣布与世纪互联合作将其云计算基础架构服务SCE+((SmartCloudEnterprise+)正式引入中国。 12月18日,微软也正式宣布联想成为中国首家微软CloudOS战略合作伙伴,联想将使用基于微软WindowsServer及Hyper-V、SystemCenter和WindowsAzurePack的微软云平台对外提供服务,成为中国首家微软CloudOS战略合作伙伴。 国内本地云计算服务提供商也坐不住了。 阿里云当天推出了“阿里云1218”活动,阿里云全线产品降价,最高降幅50%。金山推出了挖矿云主机,限量免费送,12月18日11点开抢。 12月19日,腾讯云的年终大促即将盛大开启。据消息人士透露,腾讯云此次会在云服务器、IDC带宽等服务上给予开发者前所未有的惊喜折扣,这意味着开发者可以用更低的成本去使用腾讯云。 一时间,云服务市场好不热闹。 亚马逊AWS落地中国 亚马逊方面表示,为了更好地落地中国,并遵守中国的相关法律和监管要求,亚马逊AWS中国采用了“多伙伴策略”来提供云计算服务。 一方面,北京市政府、宁夏自治区政府和亚马逊AWS、宽带资本旗下的云基地签署合作谅解备忘录,通过位于北京和宁夏的云计算基础设施为中国各地客户提供云服务;另一方面,亚马逊AWS也已经和光环新网和网宿科技合作,将为亚马逊提供必要的互联网数据中心服务和互联网接入服务,包括基础架构、带宽和网络功能。 亚马逊方面负责AWS在中国的业务发展的全球副总裁容永康表示,通过与北京和宁夏两地政府合作,亚马逊成为第一个参与到“前店后厂”的云服务厂商。容永康称,AWS是最早实践云计算服务的厂商,会将优质的技术资源带入中国,并会在中国市场长期扎根发展。 据了解,亚马逊AWS入华的消息此前一直都有传闻,但是每次都没有真正得到落实。最近一次是在今年年初,据了解当时亚马逊在中国招聘的AWS员工,而且开始游说一些企业购买亚马逊AWS服务,不过这些服务只能通过亚马逊位于海外的数据中心提供。 据介绍,包括小米、奇虎360、金山软件等数千家中国企业的海外分公司已经开始使用AWS服务。“客户在开拓在国际市场的同时,亚马逊也在不断加强对中国市场的客户需求的理解。”容永康说。 国外成熟的公有云服务提供商一直垂涎于中国市场,但是由于资质、监管等问题一直无法真正落地中国。直到去年11月1日,微软宣布与国内互联网基础设施服务提供商世纪互联达成合作,实现微软企业级云服务——Office365和WindowsAzure在中国的落地,这是国外云服务上落地中国的首个案例。据悉,其合作方式是,微软向世纪互联授权技术,由后者运营这两项服务。 紧接着,SAP和IBM也同样借道进入中国,提供公有云服务。虽然此次亚马逊方面没有透露更多的落地细节,孙永杰表示,基于国内对外资企业进入中国进行公有云服务,政策方面监管严格,亚马逊方面或许也是像其他国外等云服务提供商入华一样的路径。 国内云计算将激战 事实上,自从2006年推出云计算服务以来,由于竞争策略出色,亚马逊在此项业务中规模扩张迅速,并在行业中遥遥领先,硅谷创业公司中约90%使用亚马逊的云计算服务。 据市场研究公司Synergy估计,亚马逊第四季度云计算的营收将超过7亿美元,这意味着亚马逊将比其他所有主要云计算服务提供商,包括微软、IBM、谷歌等的营收总和还高15%。 “作为一个在行业内重量级的云计算服务提供商,AWS入华将让国内其他企业也加速发展,这有利于市场更加良性发展。”AWS在中国的合作伙伴——网宿科技(300017.SZ)副总裁刘洪涛接受21世纪经济报道记者独家专访时表示,网宿科技与亚马逊合作的谈判前后持续了三四年。网宿科技主要为AWS等云计算平台的客户提供CDN服务和IDC服务,保证云平台良好的用户体验。 在AWS宣布落地中国的同时,IBM、微软、阿里巴巴等竞争对手也在同一天推出了不同的促销策略以及宣布与其他企业的战略合作,有分析认为,各大厂商都在阻击亚马逊入华。 IT产业分析师孙永杰表示,目前国内企业真正将大多数预算放到云计算上面还比较少,市场的接受度目前还比较低,这对于对所有企业而言大家的机会基本上是均等的。 业内人士告诉21世纪经济报道记者,AWS所提供的是大而全的公有云服务,其服务产品丰富;而国内的云服务提供商包括腾讯、百度、阿里等公司都基于自己的公司特点搭建生态圈,腾讯是依赖庞大的高黏度客户,帮助合作伙伴进行推广,纵深发展客户;而百度终端客户流量大,云盘做得出色,阿里云则是基于自己建立的电商体系下的平台,通过技术的积累而发展。 “AWS落地中国也需要与其他企业同台竞技,包括价格竞争、市场教育和宣传营销的落实等。”孙永杰说,亚马逊的云服务有价格优势,性价比强,但是作为一家互联网企业,对于有些企业对更加复杂的云服务的需求,不是像IBM这种精于服务企业级的IT公司那样在行。 “AWS产品大而全,但是无法覆盖中国这么大的市场,大家都是同一起跑线上竞争,挖掘这个市场。”上述业内人士对21世纪经济报道记者说。(编辑卢爱芳) 转自:http://www.chinaz.com/news/2013/1219/331826.shtml

龙生   20 Dec 2013
View Details

JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用

今天再次设置java的环境变量,突然发现每次设置都只是按照步骤一步步将其设置完,并不了解为啥要设置,于是上网找了找,找到遍文章,觉得不错,就留下了。 仅供记录学习。转自:http://bbs.tech.163.com/bbs/tech_0ik1/147645925.html 在把jdk安装到计算机中之后,我们来进行设置使java环境能够使用。 首先右键点我的电脑。打开属性。然后选择“高级”里面的“环境变量”,在新的打开界面中的系统变量需要设置三个属性“JAVA_HOME”、 “path”、“classpath”,其中在没安装过jdk的环境下。path属性是本来存在的。而JAVA_HOME和classpath是不存在 的。 一:点“新建”,然后在变量名写上JAVA_HOME,顾名其意该变量的含义就是java的安装路径,呵呵,然后在变量值写入刚才 安装的路径“C:\jdk1.6”。(注:如果安装的路径不是磁盘C或者不是在jdk1.6这个文件夹,可对应修改。以下文字都是假定安装在C: \jdk1.6里面。) 二:其次在系统变量里面找到path,然后点编辑,path变量的含义就是系统在任何路径下都可以识别java命令,则 变量值为“.;%JAVA_HOME%\bin”,(其中“%JAVA_HOME%”的意思为刚才设置JAVA_HOME的值),也可以直接写上“C: \jdk1.6\bin” 三: 最后再点“新建”,然后在变量名上写classpath,该变量的含义是为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别。其值为“.;%JAVA_HOME%\lib \dt.jar;%JAVA_HOME%\lib\toos.jar (要加.表示当前路径)”,与相同“%JAVA_HOME%有相同意思” 以 上三个变量设置完毕,则按“确定”直至属性窗口消失,下来是验证看看安装是否成功。先打开“开始”-> “运行”,打入“cmd”,进入dos系统界面。然后打“java -version”,如果安装成功。系统会显示java version jdk"1.6.0"。 确保安装在C盘文件名为jdk1.6,环境变量直接复制就可以了,在dos界面中输入javac来查看该命令是否合法,同样输入java来查看该命令是否合法 这样环境变量就设置好了,下面进行对PATH,CLASSPTH,JAVA_HOME的讲解 以下为设置JAVA_HOME,CLASSPATH,PATH的目的: 1.设置JAVA_HOME: 一、为了方便引用,比如,你JDK安装在C:\Program Files\Java\jdk1.6.0目录里,则设置JAVA_HOME为该目录路径, 那么以后你要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串; 二、归一原则, 当你JDK路径被迫改变的时候, 你仅需更改JAVA_HOME的变量值即可, 否则,你就要更改任何用绝对路径引用JDK目录的文档, 要是万一你没有改全, 某个程序找不到JDK, 后果是可想而知的—-系统崩溃! 三、第三方软件会引用约定好的JAVA_HOME变量, 不然, 你将不能正常使用该软件, 以后用JAVA久了就会知道, 要是某个软件不能正常使用, 不妨想想是不是这个问题. 2.设置CLASSPATH: 这 是一个很有趣,当然也比较折磨初学者的问题, 这个变量设置的目的是为了程序能找到相应的".class"文件, 不妨举个例子: 你编译一个JAVA程序—A.java, 会得到一个A.class的类文件,你在当前目录下执行java A, 将会得到相应的结果(前提是你已经设置CLASSPATH为"."). 现在, 你把A.class移到别的目录下(例如:"e:\"), 执行java A, 将会有NoClassDefFindError的异常,原因就是找不到.class文件, 现在你把CLASSPATH增加为:".;e:\"再运行java A, 看看会有什么结果~~:)~~~, 一切正常, java命令通过CLASSPATH找到了.class文件! 3.设置PATH: 道理很简单, 你想在任何时候都使用%JAVA_HOME%\bin\java 等来执行java命令吗, 当然不会, 于是, 你可以选择把 %JAVA_HOME%\bin添加到PATH路径下, 这样, 我们在任何路径下就可以仅用java来执行命令了.(当你在命令提示符窗口输入你个代码时,操作系统会在当前目录和PATH变量目录里查找相应的应用程 序, 并且执行. 转自:http://www.cnblogs.com/kevinlocn/archive/2009/10/12/1581855.html

龙生   17 Dec 2013
View Details

在Access中执行SQL语句

Access在小型系统开发中等到了广泛使用。虽然Access提供了可视化的操作方法,但许多开发人员还是喜欢直接用SQL语句操作数据表。如何在Access中打开SQL视图,对于初次使用Access的程序员可得费点时间呢。 1、ACESS2007 (1)点击“创建”--点击 “查询设计” (2)点击关闭 (3)点击左上角的"SQL视图"就可以打开SQL窗口了 2、ACCESS 2003 (1)点击对象里的“查询” (2)点击 “在设计视图创建查询” ,再点击“关闭” (3)再点击   左上角的"sql" (4)就可以输入sql语句了 3、Access里like语句通配符 Access里like的通配符用法是这样:“?”表示任何单一字符;“*”表示零个或多个字符;“#”表示任何一个数字。如: select * from tablename where fieldname like '*沙洲*' 拣尽寒枝不肯栖,寂寞沙洲。 转自:http://www.cnblogs.com/zhouhb/archive/2011/07/22/2114344.html

龙生   16 Dec 2013
View Details

WinForm UI 多线程 (线程间操作无效)

一个简单的Form, 按钮btnTest是enabled=false。在btnEnable的Click事件中 创建线程,在线程中尝试设置btnTest.Enabled = true; 发生异常:线程间操作无效: 从不是创建控件“btnTest”的线程访问它。 代码如下:

在默认情况下,C#不准许在一个线程中直接访问或操作另一线程中创建的控件,这是因为访问windows窗体控件本质上是不安全的。 线程之间是可以同时运行的,那么如果有两个或多个线程同时操作某一控件的某状态,尝试将一个控件变为自己需要的状态时, 线程的死锁就可能发生。 为了区别是否是创建该控件的线程访问该控件,Windows窗体控件中的每个控件都有一个InvokeRequired属性,这个属性就是用来检查本控件是否被其他线程调用的属性,当被创建该线程外的线程调用的时候InvokeRequired就为true。有了这个属性我们就可以利用它来做判断了。 光判断出是否被其他线程调用是没有用的,所以windows窗体控件中还有一个Invoke方法可以帮我们完成其他线程对控件的调用。结合代理的使用就可以很好的完成我们的目标。 上面问题的解决方法: 方法一: public Form1() { InitializeComponent();     CheckForIllegalCrossThreadCalls = false; } // // Summary: // Gets or sets a value indicating whether to catch calls on the wrong thread // that access a control’s System.Windows.Forms.Control.Handle property when // an application is being debugged. // // Returns: // true if calls on the wrong thread are caught; otherwise, false. [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [SRDescription("ControlCheckForIllegalCrossThreadCalls")] [Browsable(false)] public static bool CheckForIllegalCrossThreadCalls { get; set; } 方法二:

方法三: 通过ISynchronizeInvoke和MethodInvoker.

[…]

龙生   15 Dec 2013
View Details
1 231 232 233 280