我使用SlimDX用C#编写的3D图形软件在CPU上进行了大量的矢量操作.(在这种特定情况下,无法将工作卸载到GPU).
如何让矢量数学更快?到目前为止,我发现了这些方法:
还有其他选项可以在.NET中实现更快的矢量数学吗?
我的.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被篡改,则此方法不会检测到它.
如何查看签名?
考虑这个小程序:
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.
我通过IsolatedStorageFile.GetMachineStoreForAssembly()方法使用Isolated Storage来存储我的应用程序设置.
在我的应用程序部署完毕后,我购买了一个数字证书来签署我的软件.但是,带有证书的新版本无法读取旧的设置文件.这是因为签名改变了申请身份.
如何访问旧版本(未签名)编写的旧设置?是否有可能通过传递旧身份以某种方式获得旧装配的机器商店?
在Windows窗体中,当我将标签控件Y=0放在组框内时,标签与组框顶部的标题文本相交.
如何获得可用区域Groupbox,即不受框的标题文本阻碍的区域?
设置control.Y = groupBox.Padding.Top不起作用.并且Groupbox.ClientRectangle也不考虑文本.

编辑:有一个简单的黑客来获得内部矩形:只需Label在其中放置一个GroupBox,并将其Dock属性设置为填充.然后,您可以从Panel获取相关信息(上/下/左/右),或直接使用面板添加您的子控件.但是,我仍然想知道如何在没有这些黑客的情况下获得这些坐标.
我想防止面板在使用鼠标滚轮时滚动。我尝试Handled在HandledMouseEventArgsto上设置标志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)
使用鼠标滚轮时,面板会滚动。我怎样才能阻止它滚动?
我想以编程方式在 Windows 11 上切换亮/暗模式。
现有的解决方案并不令人满意:
使用注册表值“AppsUseLightTheme”和“SystemUsesLightTheme”。这在 Windows 10 中完美运行。但是,在 Windows 11 中,该更改并未应用于所有地方。例如,切换到深色模式时,资源管理器窗口仍然是浅色的。并且任务栏右上角的时钟文本仍然是黑色的,因此现在无法再读取时钟。
以编程方式选择不同的主题- 但是,这会更改我的桌面背景。我真的只想更改暗/亮模式并保持其他一切不变。
实现这一目标的最佳方法是什么?
使用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"步骤?
在WinForms和C#,看来我不能创建宽于65535.如果我将它设置为70.000,该值被重置为65535通过Control.Size与ILSpy源挖一个控制,我不能马上找到负责代码用于夹紧尺寸.
那么这是Win32 API还是Windows Forms的限制?有没有办法解决这个问题,例如使用非托管互操作?
我需要如此大的控件的原因是我将非常长的音频文件的音乐波形绘制到它上面.(是的,我可以直接绘制波形,没有包含控件;但这需要大量的重构).我这里不是在谈论绘图代码.显然,只需要绘制可见部分,但事实是我想要一个宽达200.000像素的控件.
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应该创建一个图像副本?
我想用标准的,独立于平台的C++编写一个算法库.
然后,我可以使用相同的C++代码并为.NET编译它,以便C#应用程序可以使用该库吗?如果没有,实现这种互操作的最简单方法是什么?