有时我需要一个自定义的控件外观.或者做很多自定义绘画.我知道我可以这样做OnPaint(参见:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onpaint.aspx)
使用OnPaint?net应用程序自定义绘制内容的正确方法是什么?是否有任何规则需要记住以保持我的应用程序优化,并将渲染时间保持在最低限度?
注意:我已经看到并且经历过OnPaint的许多低效使用,因此我创建了这个问答.
注意:实际上有两个问题......
当我使用mysqldump二进制文件转储 mysql 数据库时,我得到一个文件,其中包含(在其他行中):
CREATE DATABASE /*!32312 IF NOT EXISTS*/MyDatabase/*!40100 DEFAULT CHARACTER SET utf8 */;
我在 Google 和 MySql 参考资料上进行了搜索,但我找不到那些 /*!32312 的含义以及它们是如何工作的。我只能猜测它们是有条件的评论。例如,如果 build > 32312,执行“IF NOT EXIST”?
任何人都可以对此有所了解吗?
我想知道这一点的原因是因为我无法在 C# 客户端中使用转储内容作为 1 查询执行还原。使用此代码:
MySqlConnection msc = default(MySqlConnection);
MySqlCommand cmd = default(MySqlCommand);
MySqlTransaction mst = default(MySqlTransaction);
try
{
//Create a connection to the database
msc = new MySqlConnection(ConnectionString);
msc.Open();
//Creata a MySql Transaction
mst = msc.BeginTransaction();
cmd = msc.CreateCommand();
cmd.Transaction = mst;
cmd.CommandText = ContentsOfMySqlDumpSql;
cmd.ExecuteNonQuery();
mst.Commit(); …Run Code Online (Sandbox Code Playgroud) 在Microsoft Visual C++中,我有以下代码来访问注册表中的路径.然后我读键的值Installed用RegQueryValueEx.到目前为止,这个值似乎很好,1这与我系统上Visual C++ 2010运行时的存在相对应.(它恰好是检测c ++运行时存在的一段代码).
现在当我查看时regedit.exe,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0我没有VC在树上看到.
这怎么可能?我在这个问题中复制/粘贴了所有路径和代码,所以它们必须是正确的.
C++应用程序中的代码:
HKEY RegistryKey;
DWORD ErrorCode;
DWORD RegDwordValue = 0;
DWORD RegDwordValueSize = sizeof(DWORD);
if((ErrorCode = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\VisualStudio\\10.0\\VC\\VCRedist\\x86",
0, //Reserved
KEY_READ,
&RegistryKey)) != ERROR_SUCCESS)
{
//Either the key does not exists, or registry access is denied. Anyway, detection did not succeed
std::cout << "Could not read registry path:\n\t" << lpcRegistryPath << "\n\tError code: " << ErrorCode;
return false;
}
if((ErrorCode = …Run Code Online (Sandbox Code Playgroud) 我正在使用Intel Ivy Bridge CPU,并且想使用RDRAND操作码(https://software.intel.com/zh-cn/articles/intel-digital-random-number-generator-drng-software-implementation-guide)在C#中。
如何通过C#调用此CPU指令?我在这里看到了一个从c#执行汇编代码的示例:C#中的x86 / x64 CPUID
但是我不确定如何将其用于RDRAND。该代码不需要检查执行该代码的CPU是否支持该指令。
我已经看过这个C ++示例,它执行来自Intel的drng_samples的汇编字节代码:
int rdrand32_step (uint32_t *rand)
{
unsigned char ok;
/* rdrand edx */
asm volatile(".byte 0x0f,0xc7,0xf0; setc %1"
: "=a" (*rand), "=qm" (ok)
:
: "edx"
);
return ok;
}
Run Code Online (Sandbox Code Playgroud)
如何将在C#中执行汇编代码的示例与来自英特尔drng示例代码的C ++代码结合起来?
我已经在互联网上阅读了很多例子,但我无法弄清楚出了什么问题.我有一个WiX安装程序,可以在安装时将所有MySQL服务器文件复制到某个位置.然后我想在安装结束之前运行MySQLInstanceConfig.exe.
<CustomAction Id="CAConfigureMySqlInstance"
Directory="dir96BE76D0898DC48E62BC8465D43A5949"
Impersonate="no"
Execute="commit"
ExeCommand="[dir96BE76D0898DC48E62BC8465D43A5949]MySQLInstanceConfig.exe"
Return="check"
/>
<InstallExecuteSequence>
<Custom Action='CAConfigureMySqlInstance' After='InstallFiles' />
<!-- See this for Before/After sequence moments: http://msdn.microsoft.com/en-us/library/windows/desktop/aa371199(v=vs.85).aspx -->
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
我认为After='InstallFiles'确实是安装程序将所有文件放在正确的位置之后.现在我看到进度条在安装程序中的"复制新文件"中.然后我收到一条消息"无法运行此安装所需的程序".当我查看日志文件时,我看到了这个:
MSI(s)(54:94)[14:14:32:886]:注意:1:1721 2:CAConfigureMySqlInstance 3:C:\ Program Files(x86)\ MyCompnay\MySQL\MySQL Server 5.5\bin\4: C:\ Program Files(x86)\ MyCompany\MySQL\MySQL Server 5.5\bin\MySQLInstanceConfig.exe
每当我在'Run(Windows + R)'中复制该路径时,都会运行MySQL配置器!所以路径是正确的.因此我得出结论,在错误发生的那一刻,文件已经被复制到该位置!错误代码是1721.
每当我更改ExeCommand为C:\Windows\Explorer.EXE C:\SomeDirIKnow,Windows资源管理器都会启动...所以自定义操作似乎是正确的...
我该如何解决这个问题?
注意:使用.Net 4.0
考虑以下代码.
String ad = "FE23658978541236";
String ad2 = "00FABE002563447E".ToLower();
try
{
PhysicalAddress.Parse(ad);
}
catch (Exception)
{
//We dont get here, all went well
}
try
{
PhysicalAddress.Parse(ad2);
}
catch (Exception)
{
//we arrive here for what reason?
}
try
{
//Ok, I do it myself then.
ulong dad2 = ulong.Parse(ad2, System.Globalization.NumberStyles.HexNumber);
byte[] bad2 = BitConverter.GetBytes(dad2);
if (BitConverter.IsLittleEndian)
{
bad2 = bad2.Reverse().ToArray<byte>();
}
PhysicalAddress pa = new PhysicalAddress(bad2);
}
catch (Exception ex)
{
//We don't get here as all …Run Code Online (Sandbox Code Playgroud) 我有这个通用方法,我想确保指定的类型是枚举.现在我知道我做不了类似的事情where T:enum.但我想在运行时确保.
我知道我可以这样做typeof(T).IsENum.但我想用这样的反射
public static List<Tuple<T, Y>> Produce<T, Y>()
where T: struct, IConvertible
where Y: struct, IConvertible
{
var methodInfo = System.Reflection.MethodBase.GetCurrentMethod();
foreach(var typeInMethod in methodInfo.GetGenericArguments())
CheckTypeIsEnum(typeInMethod);
Run Code Online (Sandbox Code Playgroud)
问题是methodInfo.GetGenericArguments()返回的类型不是我指定的枚举类型.但相反,他们是T和Y和BaseType: {Name = "ValueType" FullName = "System.ValueType"}.
总结:如何获取方法中使用的所有泛型类型的数组?
PS .Net 4.5
请参阅下面的代码片段。用一维索引访问多维数组的方法是什么?Foreach 可以做到。是的,我知道,具有产量的 IEnumerable 与索引不同。我应该使用 foreach 并创建一个新数组吗?或者我可以在不创建新数组的情况下做到这一点吗?
int[,] myArray = new int[2, 2];
myArray[0,0] = 1;
myArray[1,1] = 2;
myArray[0,0] = 3;
myArray[1,1] = 4;
foreach (var value in myArray)
{
Console.Write(value);
}
var valueAtIndex = myArray[2]; //Won't compile, error: Wrong number of indices inside []; expected 2
Run Code Online (Sandbox Code Playgroud) 我们正在使用 ngx-bootstrap,我们需要一个日期选择器。所以ngx-bootstrap 的 Datepicker似乎是一个显而易见的选择。当用户导航到下个月时,我们希望加载日历的可用日期。为此,我们想订阅一些事件。我在文档中没有看到这样的事件。但我确实在(常规)引导程序变体 datepicker 的文档中看到了它。我尝试了各种方法,甚至进入 dom 并为单击事件添加事件侦听器。这有效了 1 次,然后可能会重新渲染 UI 并重新创建按钮。最后的手段似乎要么使用 MutationObserver (非常痛苦),要么下载日期选择器的源代码并将其破解(也很痛苦)。这似乎是一件微不足道的事情:知道日历的月份何时变化。但我还没有到达那里。任何帮助深表感谢!