我目前正在研究.NET的Reactive Extensions框架,我正在研究我发现的各种介绍资源(主要是http://www.introtorx.com)
我们的应用程序涉及许多检测网络帧的硬件接口,这些接口将是我的IObservables,然后我有各种组件将使用这些帧或对数据执行某种方式的转换并生成新类型的帧.例如,还有其他组件需要显示每个第n帧.我确信Rx对我们的应用程序有用,但是我正在努力处理IObserver接口的实现细节.
我读过的大多数(如果不是全部)资源都说我不应该自己实现IObservable接口,而是使用提供的函数或类之一.从我的研究看来,创建一个Subject<IBaseFrame>将为我提供我需要的东西,我会让我的单线程从硬件接口读取数据,然后调用我的Subject<IBaseFrame>实例的OnNext函数.然后,不同的IObserver组件将从该Subject接收其通知.
我的困惑来自本教程附录中的建议,其中说:
避免使用主题类型.Rx实际上是一种函数式编程范例.使用主题意味着我们现在正在管理状态,这可能会发生变异.同时处理变异状态和异步编程很难做到.此外,许多运算符(扩展方法)都经过精心编写,以确保维护订阅和序列的正确和一致的生命周期; 当你介绍科目时,你可以打破这个.如果您明确使用主题,未来版本也可能会出现明显的性能下降.
我的应用程序对性能至关重要,我显然会在进入生产代码之前测试使用Rx模式的性能; 但是我担心我正在通过使用Subject类来做违背Rx框架精神的事情,并且该框架的未来版本将损害性能.
有没有更好的方式做我想要的?无论是否有任何观察者,硬件轮询线程都将连续运行(否则HW缓冲区将备份),因此这是一个非常热门的序列.然后我需要将收到的帧传递给多个观察者.
任何建议将不胜感激.
我最近在使用继承的UserControls时在VS2010SP1的Windows窗体设计器中出现错误.
错误是
无法为此文件显示设计器,因为其中的所有类都无法设计.设计人员检查了文件中的以下类:DebugPanel ---无法加载基类"UI.Panels.PanelBase".确保已引用程序集并且已构建所有项目.
PanelBase是一个UserControl,它在与DebugPanel相同的类库中定义,它也实现了一个接口IPanel(在同一个类库中定义).IPanel实现了一个在不同类库中定义的接口IBaseItem.
所以我们有
DebugPanel (Library UI.Shared2)
- PanelBase (Library UI.Shared2)
- UserControl (System.Windows.Forms - .NET4)
- IPanel (Library UI.Shared2)
- IBaseItem (Library Net.Common)
Run Code Online (Sandbox Code Playgroud)
PanelBase可以正确设计,项目都可以正确构建并且可以工作但是当我尝试设计任何继承的控件时,设计器会失败.这不仅限于DebugPanel控件,而是继承自PanelBase的任何控件......我也看到了我使用的具有类似继承层次结构的其他控件的问题.
我通常可以通过清理库UI.Shared2,关闭VS然后再次打开它,重建解决方案并打开设计器来临时解决问题.然后这将工作一段时间,然后再次开始失败.
有没有人有任何建议可以永久解决这个问题,而无需重新启动VS?
编辑:我的目标是所有库的完整版.NET 4.
是否可以创建代码片段或类似的东西来自动生成和插入到Visual Studio 2012中的文本编辑器中的GUID的过程?我经常需要生成新的GUID(例如,WiX安装程序,以及我们自己的内部框架).
我曾经使用宏来执行这项工作,创建一个新的GUID,然后将其插入当前的ActiveDocument.我会将宏绑定到Shift-Ctrl G,这样我就可以快速插入新的ID,而无需启动Create Guid工具并从那里复制.
宏功能现在已从Visual Studio 2012中删除,所以我需要一种替代方法,我认为可以使用扩展,但我不熟悉开发扩展,这种方法看起来有点沉重!
任何建议都将被赞赏,如果没有那么指示任何关于与文本窗口交互和插入文本需要什么类型的扩展的信息将被赞赏.然后,我可以进行扩展并将其发布到Visual Studio库中.
谢谢,安东尼
编辑添加 - 提出的任何解决方案都需要从键盘快捷键"触发".如上所述,我将宏绑定到Ctrl Shift G,因为它很容易记住并在编写代码时按下.
我目前在一个项目中使用Microsoft BCL Async库(此处),其中包含大量相互依赖的程序集,这些程序集都是针对.NET 4完整配置文件编译的,我不得不在每个项目中使用程序集绑定重定向来使其编译(按照问题2 在这里).
我现在的问题是我从C++/CLR DLL项目中使用其中一个库,它实际上不需要使用异步但我有以下编译错误:
2> C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5):警告MSB3268:无法解析主要引用"ImInterface.dll",因为它具有间接依赖性框架程序集"System.Runtime,Version = 1.5.11.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"无法在当前目标框架中解析." .NETFramework,版本= V4.0" .要解决此问题,请删除引用"ImInterface.dll"或将应用程序重新定位到包含"System.Runtime,Version = 1.5.11.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"的框架版本.
我添加了我在所有C#项目中使用的相同app.config文件,但它似乎对C++项目没有任何影响.我是否必须将其放在特定目录中或执行任何其他步骤以启用app.config文件?
我的app.config文件的内容是:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.5.11.0" newVersion="2.5.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.5.11.0" newVersion="2.5.11.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
任何建议表示赞赏!
问候,安东尼
我试图将Entity Framework 5(代码优先)用于ASP.NET Web窗体应用程序,以前我已经使用MySQL连接运行了基本的实现,并且使用SQL Server Compact 4处理桌面应用程序也取得了成功。
我遇到的问题是使用EF5时出现错误
在配置中找不到指定的存储提供程序,或者该存储提供程序无效。
这几乎没有帮助。
升级到EF6-rc1给了我更有用的错误
具有不变名称'MySql.Data.MySqlClient'的ADO.NET提供程序未在计算机或应用程序配置文件中注册,或无法加载。有关详细信息,请参见内部异常。
至少我现在知道“问题”是什么。
我的问题是我从项目中删除了所有的MySQL痕迹,没有理由为什么项目应该尝试加载MySQL提供程序。
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
Run Code Online (Sandbox Code Playgroud)
<connectionStrings>
<add name="im_customerdb" connectionString="Data Source=|DataDirectory|\CustomerData.sdf" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
这些是我的web.config文件的摘录,请让我知道是否还有其他相关的部分可能指向解决方案。
我已经在解决方案中的每个文件中搜索了单词MySQL的文本,并且没有对MySQL的引用。我已经从源代码管理中检查了项目的干净版本,以确保清除项目构建文件时不会丢失文件。
任何人都可以提供任何线索,确定我应该在哪里确定EF为什么坚持要加载MySQL提供程序?
问候,安东尼
* 编辑:*只是要补充一下,第一次访问数据库上下文时会引发异常,从堆栈跟踪中可以看到,初始化数据库时会引发异常。我也注意到了一些非常奇怪的东西。数据库文件被正确创建,似乎EF然后拒绝使用它并尝试使用MySQL。
我是 ANTLR(任何版本)的新手,我刚刚开始编写我的第一个语法文件。我正在使用带有 ANTLR 插件 (v1.6) 的 IntelliJ IDE。
我的语法是
grammar TestGrammar;
testfile : message+ EOF;
message : timestamp WS id (NL | EOF);
timestamp : NumericLiteral;
id : NumericLiteral;
NumericLiteral : INTEGER | DECIMAL;
INTEGER : [+-]? [0-9]+;
DECIMAL : [+-]? [0-9]* '.' [0-9]+;
EXPONENT : [eE] [+-]? [0-9]+;
WS: (' ' | '\t')+;
NL: '\r'? '\n';
Run Code Online (Sandbox Code Playgroud)
当我应用简单的测试输入时
123 1231
123 1312
Run Code Online (Sandbox Code Playgroud)
数据已正确解析,但我在 IntelliJ 预览窗口中收到错误消息。“额外的输入 '<EOF>' 期待 {<EOF>, NL}”
我做错了什么?EOF 似乎被正确检测到...如果我在最后一行添加一个 NL,那么该文件将被正确解析,但我需要确保最终的 NL 是可选的。
格式的其他详细信息:
我们正在对数据格式进行逆向工程,所以老实说,我们真的不知道约束是什么!我们目前的理解是:
我们已经看到文件遵循这些模式的证据,因此我们知道它们是有效的输入。