任何人都可以告诉我如何从以下代码中删除所有CA2202警告?
public static byte[] Encrypt(string data, byte[] key, byte[] iv)
{
using(MemoryStream memoryStream = new MemoryStream())
{
using (DESCryptoServiceProvider cryptograph = new DESCryptoServiceProvider())
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write))
{
using(StreamWriter streamWriter = new StreamWriter(cryptoStream))
{
streamWriter.Write(data);
}
}
}
return memoryStream.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
警告7 CA2202:Microsoft.Usage:对象'cryptoStream'可以在方法'CryptoServices.Encrypt(string,byte [],byte [])'中多次处理.为避免生成System.ObjectDisposedException,不应在对象上多次调用Dispose:Lines:34
警告8 CA2202:Microsoft.Usage:对象'memoryStream'可以在方法'CryptoServices.Encrypt(string,byte [],byte [])'中多次处理.为避免生成System.ObjectDisposedException,不应在对象上多次调用Dispose:Lines:34,37
您需要Visual Studio代码分析才能看到这些警告(这些不是c#编译器警告).
在调试应用程序时,在Visual Studio中启用了中断异常时,我总是会收到以下错误.这真是让我感到困扰,因为我们处理中断异常.有趣的是,当我继续(加载StringCollection)时它仍然有效.
消息是:
无法加载文件或程序集'System.XmlSerializers,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其依赖项之一.该系统找不到指定的文件.
这是导致异常的代码(设计器生成)
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.Collections.Specialized.StringCollection Mru {
get {
return ((global::System.Collections.Specialized.StringCollection)(this["Mru"]));
}
set {
this["Mru"] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图创建一个显示错误的空测试应用程序,但没有发生异常.我们的项目非常庞大,因此很难找到原因.也许这个网站上有人知道如何解决这个问题.
使用C#,我想创建一个文本文件的MD5哈希.我怎么能做到这一点?请包含代码.非常感谢!
更新:感谢大家的帮助.我终于确定了以下代码 -
// Create an MD5 hash digest of a file
public string MD5HashFile(string fn)
{
byte[] hash = MD5.Create().ComputeHash(File.ReadAllBytes(fn));
return BitConverter.ToString(hash).Replace("-", "");
}
Run Code Online (Sandbox Code Playgroud) 我有一个参考黑白图像,其中包含一个参考对象(例如硬币).该对象由用户标记,即感兴趣的区域.
现在我想分析其他图像并找到该对象或类似对象的位置和旋转.物体任意放置在相机下方,但从不缩放,视角始终为90度.
我评估了一个完全符合我要求的商业图书馆:Euresys EasyFind
您可以在下面找到手头任务的示例图像.当前的实现使用OpenCV的特征检测,并且无法正常工作.
模板:

找到同一枚硬币的匹配:

对于略有不同的硬币,比赛失败:

特征检测似乎是错误的方法.我需要以某种方式简单地对象.但如果我这样做(Blur,Canny,CornerHarris)功能检测根本不起作用.
我们非常感谢任何有关可靠方法的建议.一个替代的图书馆建议也会很棒.
我使用Inno Setup创建了一个设置,并希望使用Pascal Script查询注册表
if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\\Installer\UpgradeCodes\342603A924F08FA4B95B5C283FC13D13') then
Run Code Online (Sandbox Code Playgroud)
我的设置是32位(我想要安装的软件),但在64位系统上,查询被重定向到 HKCR\Wow6432Node\\Installer\UpgradeCodes
当然,即使它存在,也找不到钥匙.即使我的设置仍为32位,如何检测密钥?
我尝试使用WPF中的FolderBrowserDialog,如下所示:
public static bool BrowseFolder(out string folderName)
{
using (System.Windows.Forms.FolderBrowserDialog dlg = new System.Windows.Forms.FolderBrowserDialog())
{
var result = dlg.ShowDialog();
folderName = dlg.SelectedPath;
return result == System.Windows.Forms.DialogResult.OK;
}
}
Run Code Online (Sandbox Code Playgroud)
在Visual Studio 2010中使用"break on exception"时,在ShowDialog()调用中关闭Dialog后会出现异常.我很好奇为什么会这样.
异常:Win32Exception
消息:参数不正确
Stacktrace:at MS.Win32.UnsafeNativeMethods.SetFocus(HandleRef hWnd)
更新
我也尝试显式设置父级,但仍然抛出了异常.
var w = new System.Windows.Interop.WindowInteropHelper(parent);
System.Windows.Forms.IWin32Window i = new WindowWrapper(w.Handle);
result = dlg.ShowDialog(i);
Run Code Online (Sandbox Code Playgroud) 是否可以将滤镜应用于要使用Compute Shader渲染的几何数据,然后将结果用作顶点着色器中的输入缓冲区?这样可以省去回读数据的麻烦(和时间).
任何帮助深表感谢.
我想在我的 ObjectModel 中使用新的键枚举以避免在此 Dll 中引用 Windows.Forms。GUI 使用需要Keys枚举的类库。
是否可以通过任何方式将Key值转换为Keys值?
编辑:我刚刚发现我的问题已经在这里提出并回答:How can I conversion 'System.Windows.Input.Key' to 'System.Windows.Forms.Keys'?
我想使用两个浮点数进行双重划分(看起来Direct Compute不支持双重划分).
那可能吗?
这是我到目前为止所尝试的(c#代码,以后应该是HLSL):
int count = 7;
double value = 0.0073812398871474;
float f1 = (float)value;
float f2 = (float)((value - f1));
float r1 = f1 / count;
float r2 = f2 / count;
double result = (double)r1 + (double)r2;
Run Code Online (Sandbox Code Playgroud)
0,00105446285765182(结果)
0,00105446284102106(正确的结果)
它与f1中的舍入有关.如果值是:
double value = 0.0073812344471474;
Run Code Online (Sandbox Code Playgroud)
然后结果是正确的.