我正在寻找为我创建的类添加一些灵活性,该类建立与远程主机的连接,然后执行信息交换(握手).当前实现提供了一个Connect函数,该函数建立连接,然后阻止等待ManualResetEvent,直到双方完成握手.
以下是调用我的类的示例:
// create a new client instance
ClientClass cc = new ClientClass("address of host");
bool success = cc.Connect(); // will block here until the
// handshake is complete
if(success)
{
}
Run Code Online (Sandbox Code Playgroud)
..这里是一个过分简化的高级视图,了解该类在内部的作用:
class ClientClass
{
string _hostAddress;
ManualResetEvent _hanshakeCompleted;
bool _connectionSuccess;
public ClientClass(string hostAddress)
{
_hostAddress = hostAddress;
}
public bool Connect()
{
_hanshakeCompleted = new ManualResetEvent(false);
_connectionSuccess = false;
// start an asynchronous operation to connect
// ...
// ...
// then wait here for the connection and …
Run Code Online (Sandbox Code Playgroud) 你知道什么是API,或者是用来完成"弹出"功能的API调用序列,它可以在可移动卷的shell上下文菜单中找到?
到目前为止,我尝试了两件事:
使用CM_Request_Device_Eject,我列举(使用的可移动磁盘SetupDiXXX的API),找到一个我感兴趣的,走路设备管理体系(使用CM_XXX的API),并最后调用CM_Request_Device_Eject
的devInst
我在interesed的设备.这工作在某种意义上说,它删除我的电脑的体积并让设备"安全删除"(准备移除),但它是不一样的外壳上下文菜单中选择"弹出"功能.我知道这个的方式是因为我试图弹出的设备应该在弹出时执行某些操作,并且当我使用弹出时不会发生某些事情CM_Request_Device_Eject
.
将DeviceIoControl与IOCTL_STORAGE_EJECT_MEDIA控制代码一起使用.事件的顺序是:
这根本不起作用.每个DeviceIoControl
调用都失败ERROR_IVALID_FUNCTION
(0x00000001).我不知道为什么呼叫失败了.我已经验证了对DeviceIoControl的其他调用对于相同的文件句柄工作正常(例如IOCTL_STORAGE_GET_DEVICE_NUMBER)
最后,我的开发机器运行的是Windows 7 x64,为了让第二种方法起作用,我尝试使用管理员权限运行我的应用程序并且没有改变任何东西.
编辑
最后,我发现我在方法#2中犯了一个错误.事实证明,由于某种原因,我在使用打开音量控制柄时没有正确设置所需的访问权限CreateFile
.正确的访问模式是GENERIC_READ | GENERIC_WRITE
,我正在通过0.纠正我的错误后,我能够成功弹出设备使用DeviceIoControl - IOCTL_STORAGE_EJECT_MEDIA
与方法#1,以及使用CM_Request_Device_Eject
.
事实证明,方法#2确实是shell上下文菜单的"弹出"功能所使用的方法.使用此方法,设备可以正确反应.
我在C#中编写了一个基本的链表类.它有一个Node对象,它(显然)代表列表中的每个节点.
代码不使用IEnumerable,但是,我可以实现排序功能吗?我使用的语言是C#.在C#中有这样的例子吗?
我正在使用这个样本:
谢谢
我一直在试图弄清楚在WPF中将实时数据渲染为线图的合适方法.实际上,我实际上是指从USB设备收集的数据,该设备以大约40Hz的速率生成数据.有多个(最多7个)数据流,我以40Hz的频率以异步方式读取.
我尝试过使用两种现成的解决方案(WPF Toolkit图表和Swordfish图表),几乎查看了动态数据可视化组件,但在阅读了论坛上的一些评论之后放弃了它.似乎现成的图表解决方案面向静态图表,我实际上需要类似于Windows任务管理器的东西 - 只是更快,并且有更多的数据点.
目前,我已经推出了我自己的解决方案,这似乎是迄今为止最好的解决方案,但我有一种感觉,我错过了一些东西,因为它似乎应该能够从中获得更好的性能.
要求是它应该能够在滑动窗口中处理大约10000点的恒定范围 - 当新数据进入时(40Hz),旧数据被推到可见范围之外的左侧.并且它需要维持这个速率至少20-30分钟(每个数据流总共约75-10万个点).
我当前的自定义实现基于一个继承自Shape的组件,并使用StreamingGeometry作为DefinigGeometry.来自设备的数据通过队列传递给组件,以提高性能,因为固有的"突发效应",并且在出队操作之后,组件无效.
所以,我的问题是,我是在正确的道路上还是我完全错了?在WPF中实现此类数据可视化的最有效方法是什么?任何帮助或提示将不胜感激.
我是一名Java开发人员,我大量使用Guice.现在我想学习C#,但令我惊讶的是我还没有找到与Guice相同的东西.我刚刚找到了像Ninject,Unity,StructureMap这样的工具,但我正在寻找像Guice这样的工具.我不想手动记下我的所有注册...那么最好的选择是什么?
问题已经回答了.多谢你们.
我有一个枚举,它有字符串的参数.我可以为这些变量设置制定者吗?
public enum Blah {
Monday("a"), Tuesday("b");
}
private final String letter;
Blah(String letter){
this.letter = letter;
}
Run Code Online (Sandbox Code Playgroud)
我被允许这样做:
public String setLetter(String letter){
this.letter = letter;
}
Run Code Online (Sandbox Code Playgroud) 我需要在协议缓冲区消息中序列化.NET DateTime值.
我的计划是使用DateTime.ToBinary(),然后传递消息中的64位返回值.但我不确定选择什么作为协议缓冲数据类型来表示.
我想我应该使用fixed64(或sfixed64)数据类型时感到困惑.
我假设在这种情况下我会使用签名类型,因为DateTime.ToBinary()返回的值可以是负数也可以是正数.
这与之前的问题有关.
我现在想要了解的是如何防止UI线程异常终止应用程序,而非UI异常不能.
供参考,请参阅此示例.
最重要的是,在这种情况下我希望能够"静默地"终止进程 - 不显示Windows对话框,询问我是否要发送错误报告.
这是我的AppDomain UnhandledExceptionHandler:
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
// Maybe do some logging here if allowed
}
catch
{
}
// then just terminate the application
Application.Exit();
}
Run Code Online (Sandbox Code Playgroud)
更新
根据本回答中的评论,我想澄清一点,最重要的是,我想了解更多关于使UI线程尽早通过该Application.ThreadException
机制捕获未处理异常的机制.是否可以在非UI线程上实现此类行为.
不是在实例化期间,但是一旦完成单例对象的实例化,如果两个或多个线程试图访问同一个单例对象会发生什么?特别是在单例对象需要大量时间来处理请求的情况下(例如1分钟)......在这种情况下,如果例如5个线程尝试访问同一个单例对象,结果会是什么?
附加问题:通常我们何时应该采用单身模式,何时应该避免使用?
想象一下,你和我通过TCP发送了一个很长的句子(比方说,1024000字节).
如果你给我写了一个1024000字节的句子,你实际上使用NetworkStream写入这些字节.
当我收到时,我应该提前知道您发送的句子的大小吗?
如果没有,我如何检查何时应该停止stream.read?
如果是,该程序是否应具有将数据大小嵌入数据头部的工具?所以我先收到4个字节,看看我应该读多少个?
.Net有什么可以自动在传输中嵌入数据大小吗?