我正在处理大量COM互操作的大型多线程C#应用程序中工作。其他开发人员和我有足够的机会不小心调用Single-ThreadedApartment(STA)来自MTA线程的COM对象,以及来自它们不是在其上创建的STA线程的COM对象。性能低下,跨线程编码是主要嫌疑人。是否有测试跨公寓编码的好方法?更好的是,是否有一种防御性编程技术来测试给定的COM对象是否属于该线程的单元?我最接近的是在可疑代码周围放置一个断言语句:Debug.Assert(Thread.CurrentThread.GetApartmentState()==ApartmentState.STA);suspiciousC
直到现在我需要发送数据时打开,然后立即关闭。我收到随机的“访问端口”错误(尽管我总是在使用后关闭端口),所以我在想也许让它一直开着。假设我需要每隔一两分钟在某些COM端口发送数据,正确的使用方法是什么?谢谢.. 最佳答案 频繁调用SerialPort.Close()是错误的。让另一个应用程序从您那里窃取端口并不是非常可取的。但更有问题的是,您遇到的问题是Close()不等待由SerialPort启动的工作线程退出。该工作线程引发DataReceived、PinChanged和ErrorReceived事件。它需要“一段时间”才能退出
我正在创建一个基本上绑定(bind)两个下拉列表的服务器控件,一个用于国家/地区,一个用于州,并在国家/地区的selectedindexchanged事件上更新州下拉列表。但是,它不会回发。任何想法为什么?将它们包装在UpdatePanel中的奖励积分(有渲染问题;可能是因为我没有要引用的页面?)这是我所拥有的(删除了一些额外的数据访问内容):publicclassStateProv:WebControl{publicstringSelectedCountry;publicstringSelectedState;privateDropDownListddlCountries=newDr
我的C#服务需要定期轮询nslookup主机服务器。目前它生成一个执行批处理脚本的Process。由于性能原因,我正在考虑使用一些API进行此检查。但问题是,使用System.Net.Dns.GetHostAddresses我只能模拟nslookuphost检查,但不能模拟nslookuphostserver(没有秒参数)。我看过一堆类似的SO问题,但似乎没有一个能解决我的问题。有什么方法可以在C#中执行nslookuphostserver而无需使用一些繁重的第三方库? 最佳答案 问题解决了!http://msdn.microsof
在VisualStudio2010项目中添加.mdf文件(SQLServer数据库)时出现以下错误ConnectionstoSQLServerdatabasefiles(.mdf)requireSQLServer2005ExpressorSQLServer2008Expresstobeinstalledandrunningonthelocalcomputer我不想安装SQLServerExpress(2005/2008)因为我已经安装了SQLServer2005企业版我正在使用VisualStudio2010Ultimate 最佳答案
在我们的组织中,我们有一个SQLServer2005数据库和相当数量的数据库客户端:网站(php、zope、asp.net)、富客户端(legacyfoxpro)。现在我们需要将核心数据库中的某些事件传递给其他系统(MongoDb、LDAP等)。消息传递范式似乎非常有能力解决此类问题。所以我们决定使用RabbitMQbroker作为中间件。从数据库中消费事件的问题起初似乎只有两种可能的解决方案:轮询数据库中的传出消息并将它们传递给消息代理。在某些表上使用触发器将消息传递到同一台机器上的代理。由于涉及定期执行sql时出现的延迟问题,我不喜欢第一个想法。但是基于事件的触发器方法有一个问题,
我有一个C#程序需要对SQLServer表执行一组批量更新(20k+)。由于其他用户可以通过Intranet网站一次更新这些记录,因此我们需要构建具有锁定表功能的C#程序。一旦表被锁定以防止其他用户进行任何更改/搜索,我们将需要执行请求的更新/插入。由于我们要处理如此多的记录,我们不能使用TransactionScope(起初似乎是最简单的方法),因为我们的交易最终由MSDTCservice处理.我们需要使用另一种方法。根据我在Internet上阅读的内容,使用SqlTransaction对象似乎是最好的方法,但是我无法锁定表。当程序运行并且我单步执行下面的代码时,我仍然能够通过内部网
使用VS2008,这是我的COM对象usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;usingSystem.Windows.Forms;namespaceTestCom{[Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E")][ClassInterface(ClassInterfaceType.AutoDual)][ProgId("Test9.COMINT")]publicclassTestComClass
我一直在使用一些DirectShow接口(interface)来使用C#和DirectShow.Net播放数字电视(DVB-T).我最近遇到运行时错误COMobjectthathasbeenseparatedfromitsunderlyingRCWcannotbeused.此错误发生在以下行中:_guideData=_transportInformationFilterasIGuideData;_transportInformationFilter属于IBaseFilter类型,这是一个先前通过DirectShow.Net实用程序函数分配的COM对象。我假设错误是由于_transpor
我需要使用很久以前用Delphi开发的COM组件(dll)。问题是:dll不包含类型库…….NET中的每个互操作功能(例如TlbImp)似乎都依赖于TLB。该组件已在此处的Delphi程序中使用多年,没有出现任何问题,因为“使用Delphi的COM对象不是什么大问题,因为我们知道接口(interface)”(引用Delphi开发人员的话)。有什么方法可以在没有TLB的情况下从c#使用此DLL?我试过将DLL用作非托管,但它导出的唯一方法是DllUnregisterServer、DllRegisterServer、DllCanUnloadNow和DllGetClassObject。我知道