有人能指出我使用.net 4.5异步API(异步,等待,任务<>,ReadAsync等)进行串行通信的工作示例吗?
我试图调整现有的事件驱动的串行样本,并且得到各种可怕的行为 - "其他应用程序使用的端口"错误,VS2013调试器抛出异常和锁定 - 这通常需要PC重启才能从中恢复.
编辑
我从头开始编写自己的样本.这是一个简单的Winforms项目,它写入Output窗口.表单上的三个按钮 - 打开端口,关闭端口和读取数据.ReadDataAsync方法调用SerialPort.BaseStream.ReadAsync.
截至目前,它将从端口读取数据,但我遇到了使其变得强大的问题.
例如,如果我拔下串行电缆,打开端口,然后单击Read Data两次,我将得到一个System.IO.IOException(我有点期待),但我的应用程序停止响应.
更糟糕的是,当我尝试停止我的程序时,VS2013会抛出一个"正在进行停止调试"对话框,该对话框永远不会完成,我甚至无法从任务管理器中删除VS. 每次发生这种情况都必须重启我的电脑.
不好.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private SerialPort _serialPort;
public Form1()
{
InitializeComponent();
}
private void openPortbutton_Click(object sender, EventArgs e)
{
try
{
if (_serialPort == null )
_serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
if (!_serialPort.IsOpen)
_serialPort.Open(); …Run Code Online (Sandbox Code Playgroud) 我们最近将Automapped FNH/NH项目升级到NH 3.2,并遇到了很多问题.
我们的对象模型中有很多属性,只有"getter",例如
public virtual float Polydispersity
{
get { return MeasurementRun.PolyDispersity; }
}
Run Code Online (Sandbox Code Playgroud)
这曾经工作正常,但现在我们得到"找不到属性的setter"错误.
这很难找到,因为由于某种原因,自动化无法创建数据库表,导致在保存到数据库时出现"无持久性"错误 - 请参阅此处了解详细信息.
这是因为LinFu现在已经建成了NH?我知道私人制定者不再有效,这似乎也是一个类似的问题.
我们曾经使用Castle,我真的很喜欢NH现在不需要所有其他DLL,但如果它破坏了我们对象模型的很大一部分,那就不行了.
有关如何绕过这个的任何建议?
堆栈跟踪
FluentNHibernate.Cfg.FluentConfigurationException:创建SessionFactory时使用了无效或不完整的配置.检查PotentialReasons集合,以及InnerException以获取更多详细信息.
---> NHibernate.PropertyNotFoundException:在NHibernate.Mapping.Property.GetSetter(NHibernate.Mapping.Property.GetSetter)的NHibernate.Properties.BasicPropertyAccessor.GetSetter(Type type,String propertyName)的类'BI_OverlordDlsAppCore.OfeDlsMeasurement'中找不到属性'Polydispersity'的setter clazz所)在NHibernate.Tuple.Entity.PocoEntityTuplizer.BuildPropertySetter(物业mappedProperty,对PersistentClass mappedEntity)在NHibernate.Tuple.Entity.AbstractEntityTuplizer..ctor(entityMetamodel entityMetamodel,对PersistentClass mappingInfo)在NHibernate.Tuple.Entity.PocoEntityTuplizer..ctor(entityMetamodel在NHibernate.Tuple.EntityMetamode.EntityEntityModeToTuplizerMapping..ctor(PersistentClass mappedEntity,EntityMetamodel em)的NHibernate.Tuple.EntityMetamodel..ctor(PersistentClass persistentClass,ISessionFactoryImplementor sessionFactory)NHibernate.Persister.Entity.AbstractEntityPersister中的entityMetamodel,PersistentClass mappedEntity. .ctor(PersistentClass persistentClass,ICacheConcurrencyStr ategy缓存,ISessionFactoryImplementor工厂)在NHibernate.Persister.Entity.JoinedSubclassEntityPersister..ctor(对PersistentClass对PersistentClass,ICacheConcurrencyStrategy缓存,ISessionFactoryImplementor工厂,IMapping映射)在NHibernate.Persister.PersisterFactory.CreateClassPersister(模型对PersistentClass,ICacheConcurrencyStrategy缓存,ISessionFactoryImplementor工厂,IMapping CFG at NHibernate.Impl.SessionFactoryImpl..ctor(配置cfg,IMapping映射,设置设置,EventListeners监听器)at NHibernate.Cfg.Configuration.BuildSessionFactory()at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()---内部异常结束堆栈跟踪---位于FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()位于C:\ Bicw_Dev\Bic.Net\Private Projects\NHibernate\FNH中的BI_OverlordPackageCore.OfeDatabase.CreateSqliteSessionFactory()中.映射错误\ OfeDatabase.cs:第192行C:\ Bicw_Dev\Bic.Net\P中的BI_OverlordPackageCore.OfeDatabase.GetMainSession()rivate Projects\NHibernate\FNH 1.3 Mapping Bug\OfeDatabase.cs:位于C:\ Bicw_Dev\Bic.Net\Private Projects\NHibernate\FNH 1.3 Mapping Bug\OfeDatabase中BI_OverlordPackageCore.OfeDatabase.Initialize(Assembly []程序集)的第147行. CS:\ Bicw_Dev\Bic.Net \私营项目\ NHibernate的\ FNH 1.3映射错误\ Form1.cs中:在System.Windows线23在FNH_1._3_Mapping_Bug.Form1.button1_Click(对象发件人,EventArgs e)在C线305. System.Windows.Forms.OnClick(EventArgs e)位于System.Windows.Forms.OnMouseUp(MouseEventArgs mevent)的System.Windows.Forms.Button.OnClick(EventArgs e),位于System.Windows.Forms.Control.WmMouseUp(Message&m) ,MouseButtons按钮,Int32单击)在System.Windows.Forms.ButtonBase.WndProc(Message&m)的System.Windows.Forms.Control.WndProc(Message&m)处于System.Windows.Forms.Button.WndProc(Message&m)at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息&m)上System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息&m)上System.Windows.Forms.NativeWindow.Cal lback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)
nhibernate nhibernate-mapping fluent-nhibernate fluent-nhibernate-mapping
我是Ankh和Tortoise的新用户.目前正在增加VS2008应用程序套件,该应用程序套件将具有多个.exe文件,但具有许多通用代码.
目前,我们通过将源文件放在"共享"文件夹树中,并在需要编译这些文件的所有VS2008项目中使用"添加为链接"来共享.exe项目之间的代码.(我们从VisualSVN开始,但切换到Ankh,因为它处理链接文件好得多.)
我们遇到的问题是我们仍在积极修改共享文件夹树的结构 - 添加新文件夹,并在项目发展过程中将现有文件移入其中.
主要使用Tortoise来改变目录结构,但一直遇到问题 - 似乎与存储库不同步.我们收到错误消息,指出文件丢失或树冲突.
我怀疑问题可能是我们有时会以错误的顺序执行操作 - 例如,在移动目录然后提交之前伪造进行更新 - 但我不确定.
所以,我的问题:
哪个是更改目录结构的更好工具 - Ankh或Tortoise?
对于首选工具,必须执行哪些步骤以及按什么顺序执行?
我一直在使用WinForms数据绑定来显示来自使用Fluent NHibernate映射的数据库中的数据,并且这种方法运行良好.
例如,我可以从实体的IList属性设置DataGridView的DataSource属性,并且瞧 - 所有数据都是!
但现在我需要开始添加和保存新的数据行,而且这种情况并不顺利.我以为我能够只启用网格的AllowUserToAddRows属性,并且新行将被添加到实体中的基础IList,但这不起作用.
然后,在稍微搜索之后,我尝试将DataSource属性设置为从IList填充的BindingList,但是也没有使用新行更新.
在我的搜索过程中,我也遇到了一些人报告WinForms和DataBinding的困难,这让我想知道我是否应该继续采用这种方法.
DataBinding方法值得继续吗?如果是这样,任何人都可以建议我哪里出错了?
或者,处理与添加新行相关联的所有DataGridView事件,编写自己的代码以将新对象添加到实体中的IList属性是否更好?
其他建议?(虽然我不认为切换到WPF会成为一种选择,无论数据绑定可能有多好)
这个问题的灵感来自我近一年前提出的一个问题 - 任何一个与ms原型接触的工作 - 最近再次变得活跃,但是作为Access vs SQL Server的争论.
似乎有很多Access仇恨者,主要说唱似乎是它不能很好地扩展(虽然有些人似乎已经能够使它工作).
对于那些使用过这两种技术的人来说,是否存在使用Access over SQL Server的情况?
为什么?
你怎么能提高你的成功几率?
例如,在具有一个或少量用户的桌面应用程序上,Access可能是更好的选择吗?
或者,如果采取反向策略,何时应该避免使用Access?
再次,为什么?
编辑当我说"访问"时,我想获得有关两件事的反馈:
仅使用数据库组件(Jet/ACE)
使用应用程序开发功能(报告,脚本等)
毕竟,如果您的应用程序可以忍受数据库端的限制,那么使用某些app dev功能可能会有一些优势.
(仅供记录,我在这场战斗中没有狗 - 我是一个满意的SQLite用户.)
我正在使用第三方库(Fluent NHibernate),当我在启用"中断所有公共语言运行时异常"(Debug | Exceptions ...菜单)的情况下运行时,它会在启动时抛出无害的"找不到文件"异常.
我意识到我可以取消选中特定的"找不到文件"异常,但如果在我的代码中的某个地方出现这种情况,我就不会得到休息.
是否有任何方法(pragma?属性?)来抑制异常,但只有在我知道它会发生的一个地方?
我的IT人员告诉我他想将我们的SVN服务器从Linux机器移动到Windows机箱.
我们在客户端使用TortoiseSVN和AnkhSVN.
我是否认为我们可以在工作文件夹上使用"Switch"命令指向新服务器?
还是比这更复杂?
在使用旧的INI文件多年后,我们最近开始使用XML文件.
我的同事发现了一些使用System.Xml.XmlDocument.Save的CodeProject示例代码.当两个程序试图同时写入同一个文件时,我们会遇到异常.
System.IO.IOException:进程无法访问文件'C:\ Test.xml',因为它正由另一个进程使用.
事后看来这很明显,但我们没有预料到它,因为通过Win32 API访问INI文件没有这个限制.我假设Win32调用完成了一些仲裁,它们的工作级别高于XmlDocument.Save方法.
我希望.Net库中某处有更高级别的XML例程,它们与Win32函数类似,但不知道从哪里开始查找.
或者我们可以设置文件访问权限以允许多个程序写入同一个文件?
时间很短(就像几乎所有软件项目一样),如果我们无法快速找到解决方案,我们就必须抓住我们的鼻子并回到INI文件中.
ankhsvn ×2
c# ×2
nhibernate ×2
svn ×2
tortoisesvn ×2
.net ×1
async-await ×1
asynchronous ×1
data-binding ×1
debugging ×1
ini ×1
migration ×1
ms-access ×1
serial-port ×1
sql-server ×1
winforms ×1
xml ×1