小编LTR*_*LTR的帖子

.NET中的快速矢量数学 - 有哪些选择?

我使用SlimDX用C#编写的3D图形软件在CPU上进行了大量的矢量操作.(在这种特定情况下,无法将工作卸载到GPU).

如何让矢量数学更快?到目前为止,我发现了这些方法:

  • 在Mono上运行而不是在Microsoft .NET上运行,因为它们具有SIMD支持.不是这个项目的选项.
  • SlimGen,一个在运行时注入高性能数学代码的项目.不幸的是,该项目尚未处于可用状态.
  • 使用利用SSE指令的编译器在C++中编写DLL.与C#中的DLL互操作.

还有其他选项可以在.NET中实现更快的矢量数学吗?

.net c# sse simd slimdx

15
推荐指数
2
解决办法
8147
查看次数

检查EXE上的数字签名

我的.NET exe是使用signtool签名的.使用此代码,我可以验证证书本身的有效性:

var cert = X509Certificate.CreateFromSignedFile("application.exe");
var cert2 = new X509Certificate2(cert.Handle);
bool valid = cert2.Verify();
Run Code Online (Sandbox Code Playgroud)

但是,这仅检查证书本身,而不检查EXE的签名.因此,如果EXE被篡改,则此方法不会检测到它.

如何查看签名?

.net c# exe x509

13
推荐指数
1
解决办法
1万
查看次数

C#console应用程序中使用剪贴板的奇怪行为

考虑这个小程序:

class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        Console.WriteLine("Please copy something into the clipboard.");
        WaitForClipboardChange();
        Console.WriteLine("You copied " + Clipboard.GetText());
        Console.ReadKey();
    }

    static void WaitForClipboardChange()
    {
        Clipboard.SetText("xxPlaceholderxx");
        while (Clipboard.GetText() == "xxPlaceholderxx" && 
               Clipboard.GetText().Trim() != "")
            Thread.Sleep(90);
    }
}
Run Code Online (Sandbox Code Playgroud)

我运行它,我从记事本复制一个字符串.但程序只是从剪贴板中获取一个空字符串并写入"您复制".

这有什么问题?是否存在使剪贴板访问在控制台应用程序中表现奇怪的东西?

这是Windows 7 SP1 x86,.NET 4 Client Profile.

.net c# console clipboard winforms

9
推荐指数
2
解决办法
3009
查看次数

代码签名打破了隔离存储

我通过IsolatedStorageFile.GetMachineStoreForAssembly()方法使用Isolated Storage来存储我的应用程序设置.

在我的应用程序部署完毕后,我购买了一个数字证书来签署我的软件.但是,带有证书的新版本无法读取旧的设置文件.这是因为签名改变了申请身份.

如何访问旧版本(未签名)编写的旧设置?是否有可能通过传递旧身份以某种方式获得旧装配的机器商店?

.net c# isolatedstorage

6
推荐指数
1
解决办法
313
查看次数

获得Groupbox真正可用的区域

在Windows窗体中,当我将标签控件Y=0放在组框内时,标签与组框顶部的标题文本相交.

如何获得可用区域Groupbox,即不受框的标题文本阻碍的区域?

设置control.Y = groupBox.Padding.Top不起作用.并且Groupbox.ClientRectangle也不考虑文本.

说明

编辑:有一个简单的黑客来获得内部矩形:只需Label在其中放置一个GroupBox,并将其Dock属性设置为填充.然后,您可以从Panel获取相关信息(上/下/左/右),或直接使用面板添加您的子控件.但是,我仍然想知道如何在没有这些黑客的情况下获得这些坐标.

c# winforms

5
推荐指数
1
解决办法
1764
查看次数

防止在 Windows 窗体中使用鼠标滚轮滚动

我想防止面板在使用鼠标滚轮时滚动。我尝试HandledHandledMouseEventArgsto上设置标志false,但这不起作用。

在此重现代码中,我们有一个面板和一个按钮。

using (var scrollTestForm=new Form())
{
    var panel = new Panel() { Dock = DockStyle.Fill };
    scrollTestForm.Controls.Add(panel);
    var buttonOutsideArea = new Button();
    buttonOutsideArea.Location = new System.Drawing.Point(panel.Width * 2, 100);
    panel.Controls.Add(buttonOutsideArea);
    panel.AutoScroll = true;
    panel.MouseWheel += delegate (object sender, MouseEventArgs e)
    {
        ((HandledMouseEventArgs)e).Handled = false;
    };
    scrollTestForm.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)

使用鼠标滚轮时,面板会滚动。我怎样才能阻止它滚动?

.net c# scroll mousewheel winforms

5
推荐指数
1
解决办法
2505
查看次数

在 Windows 11 中以编程方式切换亮/暗模式

我想以编程方式在 Windows 11 上切换亮/暗模式。

现有的解决方案并不令人满意:

  1. 使用注册表值“AppsUseLightTheme”和“SystemUsesLightTheme”。这在 Windows 10 中完美运行。但是,在 Windows 11 中,该更改并未应用于所有地方。例如,切换到深色模式时,资源管理器窗口仍然是浅色的。并且任务栏右上角的时钟文本仍然是黑色的,因此现在无法再读取时钟。

  2. 以编程方式选择不同的主题- 但是,这会更改我的桌面背景。我真的只想更改暗/亮模式并保持其他一切不变。

实现这一目标的最佳方法是什么?

windows registry

5
推荐指数
0
解决办法
516
查看次数

避免CopyFilesToOutputDirectory构建步骤

使用Visual Studio 2010中的C#项目,我注意到msbuild编译到\ obj目录,然后将文件复制到实际输出目录:

CopyFilesToOutputDirectory:
Copying file from "obj\x86\Debug\Manager.exe" to "bin\Debug\Manager.exe".
Run Code Online (Sandbox Code Playgroud)

没有自定义的msbuild脚本,它是所有visual studio的默认设置.有没有办法让它直接构建到bin\Debug\Manager.exe; 规避"CopyFilesToOutputDirectory"步骤?

c# msbuild visual-studio

4
推荐指数
1
解决办法
4189
查看次数

WinForms:控件的最大大小为65535 - 解决方法?

在WinForms和C#,看来我不能创建宽于65535.如果我将它设置为70.000,该值被重置为65535通过Control.Size与ILSpy源挖一个控制,我不能马上找到负责代码用于夹紧尺寸.

那么这是Win32 API还是Windows Forms的限制?有没有办法解决这个问题,例如使用非托管互操作?

我需要如此大的控件的原因是我将非常长的音频文件的音乐波形绘制到它上面.(是的,我可以直接绘制波形,没有包含控件;但这需要大量的重构).我这里不是在谈论绘图代码.显然,只需要绘制可见部分,但事实是我想要一个宽达200.000像素的控件.

c# winforms

4
推荐指数
1
解决办法
2218
查看次数

ImageList:处理原始图像会将其从列表中删除

ImageList应创建插入其中的所有图像的副本.因此,在将原件添加到列表后处置原件应该是安全的.

为什么以下测试用例失败?

Bitmap test = new Bitmap(128, 128);
ImageList il = new ImageList();

il.Images.Add(test);
Assert.AreEqual(1, il.Images.Count); // OK, image has been inserted
test.Dispose(); // now let's dispose the original
try
{
    var retrievalTest = il.Images[0];
}
catch (ArgumentException) // ... but this Exception happens!
{
}

Assert.AreEqual(1, il.Images.Count); // and this will fail
Run Code Online (Sandbox Code Playgroud)

这里似乎发生了这样的事情:当尝试检索图像时,ImageList发现原始文件已被处理,并将其从ImageList中删除.

为什么会发生这种情况,我认为ImageList应该创建一个图像副本?

.net c# system.drawing imagelist winforms

3
推荐指数
1
解决办法
1099
查看次数

将标准C++嵌入到.NET应用程序中

我想用标准的,独立于平台的C++编写一个算法库.

然后,我可以使用相同的C++代码并为.NET编译它,以便C#应用程序可以使用该库吗?如果没有,实现这种互操作的最简单方法是什么?

.net interop managed-c++ c++-cli visual-c++

2
推荐指数
1
解决办法
254
查看次数