我目前正在改进我们长期运行的方法,以便取消.我打算使用System.Threading.Tasks.CancellationToken来实现它.
我们的方法通常执行一些长时间运行的步骤(主要向硬件发送命令然后等待硬件),例如
void Run()
{
Step1();
Step2();
Step3();
}
Run Code Online (Sandbox Code Playgroud)
我对取消的第一个(也许是愚蠢的)想法会将其转化为
bool Run(CancellationToken cancellationToken)
{
Step1(cancellationToken);
if (cancellationToken.IsCancellationRequested)
return false;
Step2(cancellationToken);
if (cancellationToken.IsCancellationRequested)
return false;
Step3(cancellationToken);
if (cancellationToken.IsCancellationRequested)
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
坦率地看起来很可怕.这种"模式"也将在单个步骤内继续(并且它们必然已经相当长).这会使Thread.Abort()看起来很性感,虽然我知道它不推荐.
有没有更清晰的模式来实现这一点,不会隐藏许多样板代码下面的应用程序逻辑?
编辑
作为步骤性质的一个例子,该Run
方法可以阅读
void Run()
{
GiantRobotor.MoveToBase();
Oven.ThrowBaguetteTowardsBase();
GiantRobotor.CatchBaguette();
// ...
}
Run Code Online (Sandbox Code Playgroud)
我们正在控制需要同步的不同硬件单元才能协同工作.
我最近遇到了这个问题,我想要一个函数来处理双精度和整数,并且想知道为什么所有数字类型都没有通用接口(包含算术运算符和比较).
它会使编写函数Math.Min
(存在于无数的重载中)更方便.
引入一个额外的接口是一个突破性的变化吗?
编辑: 我想考虑使用这个
public T Add<T>(T a, T b) where T: INumber
{
return a+b;
}
Run Code Online (Sandbox Code Playgroud)
要么
public T Range<T>(T x, T min, T max) where T:INumber
{
return Max(x, Min(x, max), min);
}
Run Code Online (Sandbox Code Playgroud) 不知怎的,我无法相信我是第一个遇到这个问题的人(而且我不想相信我是唯一一个不能直接看到解决方案的傻瓜),但我的搜索功能还不够强大.
当我需要一个接一个地执行一些耗时的步骤时,我经常遇到这种情况.工作流程看起来像
var data = DataGetter.GetData();
var processedData = DataProcessor.Process(data);
var userDecision = DialogService.AskUserAbout(processedData);
// ...
Run Code Online (Sandbox Code Playgroud)
我不希望在每个步骤中阻止UI,因此每个方法都会立即返回,并在完成后引发一个事件.现在欢闹随之而来,因为上面的代码块变异了
DataGetter.Finished += (data) =>
{
DataProcessor.Finished += (processedData) =>
{
DialogService.Finished(userDecision) =>
{
// ....
}
DialogService.AskUserAbout(processedData);
}
DataProcessor.Process(data);
};
DataGetter.GetData();
Run Code Online (Sandbox Code Playgroud)
这听起来像是我的品味延续传递风格,并且必须有更好的方法来构造这个代码.但是怎么样?
什么是uniqueidentifier(Sql server 2005)在C#3.5数据类型中的等价物?
在开发我们的64位驱动程序时,我们开始了解每个驱动程序都需要正确地进行数字签名才能安装(测试模式除外).
最近,我们偶然发现一个驱动程序(用于USB摄像头),似乎缺少有效的签名.在安装过程中,我们会看到有关未签名驱动程序的红色警告屏幕,但设备可以使用此驱动程序正常运行.
我拍了照片.对于图像墙感到抱歉,我害怕错过一个重点,因为我显然不明白这里发生了什么.
Devive Manager
司机属性
司机细节
来自%system32%\ DriverStore\FileRepository的驱动程序文件
证书细节
测试模式已关闭(我们自己的驱动程序正确无法加载).
他们是怎么做到的?为什么Windows加载此驱动程序?我将非常感谢有关解释此行为的文档的一些链接.
编辑:
使用评论中建议的详细CodeIntegrity日志,我什么也没找到.日志显示一行
Code Integrity在oem132.cat中找到了该文件的文件哈希
此文件存在于%system32%\ catroot\some-guid中,与上面屏幕截图中显示的cat文件相同; 包括过期证书.
signtool verify /v /c .\mvBlueFOX_amd64.cat .\mvBlueFOX2.sys
给
Verifying: .\mvBlueFOX2.sys
File is signed in catalog: .\mvBlueFOX_amd64.cat
Hash of file (sha1): 19E6125B9C5F31E21EDA5DBAA5F77798F8E394C4
Signing Certificate Chain:
Issued to: Class 3 Public Primary Certification Authority
Issued by: Class 3 Public Primary Certification Authority
Expires: Thu Aug 03 00:59:59 2028
SHA1 hash: A1DB6393916F17E4185509400415C70240B0AE6B
Issued to: VeriSign Class 3 Code Signing 2009-2 CA
Issued by: Class 3 …
Run Code Online (Sandbox Code Playgroud) 我的应用程序从外部设备提供数据.在每个数据点之后,有一个短的电子死区时间(大约10μs),其中没有其他数据点可以到达,我的应用程序应该使用它来处理并在散点图中在屏幕上显示数据.我最重要的目标是不要超过这个电子死时间.如何在基于WPF的应用程序中解决此问题,以及对不同方法进行基准测试的方法是什么?
我尝试过的事情是:
Rectangle
a Canvas
.这太慢了10倍.DrawingVisuals
自定义控件.更好,但仍然有点太慢.将可视/逻辑子项添加到树中可能会产生太多开销.UserControl
所有数据点都存储在数组中并显示在OnRender
方法中.在每次调用OnRender时,我必须再次绘制每一点.因此,该方法随着时间减慢,这是不希望的.有没有办法告诉OnRender
不要在每次通过时清除屏幕,以便我可以逐步绘制?WriteableBitmap
.这似乎有效,但我没有找到一种方法来确定,如果无效的部分Bitmap不会偶尔添加一些非常长的等待时间(当图像实际上在屏幕上刷新时).测量这个的任何想法?编辑:
在评论中,提出了缓冲数据并以较慢的速率显示它的观点.这种方法的问题是,在某些时候我必须处理缓冲区.在测量期间执行此操作会导致我的系统繁忙且新事件将被丢弃的很长时间.因此,单独处理每一点,但是为了好,将更加可取.使用10微秒,触发为每个事件显示的是不是将其存储到缓存在任何时间和使用100μs的每50毫秒左右,处理累积的事件要好得多.
在旧的(即非WPF)时代,您可以将必要的数据放入图形存储器中,并让图形卡在方便时处理它.对于cource,它实际上不会以高于60Hz的速率显示,但您不必再次触摸此数据.
我希望我明确了我的要求.我的英语=)
我想使用公钥加密系统将非常少的数据(确切地说是15个字节)加密到尽可能短(最佳,不超过16个字节)的消息.
遗憾的是,标准公钥系统RSA产生与其密钥一样大的消息,大约100字节,具体取决于密钥大小.为了使事情变得更加困难,我只能使用.NET框架库,即没有第三方.
我已经在维基百科中阅读了一些关于椭圆曲线加密的内容,并且文本似乎表明其中的密钥大小通常比RSA密钥短得多.
这是否也转换为短信息?可以使用.NET ECDiffieHellmanCng
类来解密/加密消息吗?它似乎具有不同的类结构,比如RSA或对称密码.
使用Java和Regex解析随机字符串查找重复序列.
考虑字符串:
aaabbaaacccbb
我想找到一个正则表达式,它将在上面的字符串中找到所有匹配项:
aaabbaaacccbb
^^^ ^^^
aaabbaaacccbb
^^ ^^
Run Code Online (Sandbox Code Playgroud)
什么是正则表达式,它将检查字符串是否有任何重复的字符序列,并返回那些重复字符的组,使得组1 = aaa和组2 = bb.另请注意,我使用了一个示例字符串,但任何重复的字符都是有效的:RonRonJoeJoe ......,,,,, ,,
我惊讶地看到了今天的下列行为:给出一堂课
class Foo
{
prop int FooNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和这段代码
IEnumerable<Foo> foos = Enumerable.Range(0,3).Select(new Foo());
foreach (var foo in foos)
foo.Bar = 5;
foreach (var foo in foos)
Console.Write(foo.Bar); // Writes 000
Run Code Online (Sandbox Code Playgroud)
初始化foos
时new List<Foo>{ new Foo(), new Foo(), new Foo() }
使循环写入"555".
我的问题:为什么会发生这种情况,有没有办法绕过这个无需使用.ToList()
(需要评论,因为这里似乎不需要).
我正在寻找创造一个带有拉丝钢外观的WPF刷子的想法,类似于MacOSX Panther风格,最好不要求助于ImageBrush.有没有一种时髦的方法来使用GradientBrush来创建这种效果?
提前致谢!
c# ×8
wpf ×2
.net ×1
64-bit ×1
brush ×1
c#-3.0 ×1
certificate ×1
coding-style ×1
cryptography ×1
driver ×1
events ×1
ienumerable ×1
java ×1
regex ×1
sql ×1
windows ×1