我想在显示ContextMenu之前右键单击选择一个WPF TreeView节点.
对于WinForms,我可以使用这样的代码在上下文菜单下点击查找节点,WPF的替代方案是什么?
我发现自己几次编写这种类型的东西.
for (int i = 0; i < 10; i++)
{
if (Thing.WaitingFor())
{
break;
}
Thread.Sleep(sleep_time);
}
if(!Thing.WaitingFor())
{
throw new ItDidntHappenException();
}
Run Code Online (Sandbox Code Playgroud)
它只是看起来像坏代码,有没有更好的方法这样做/它是一个糟糕的设计的症状?
如果我的应用程序只注册了几个事件处理程序(并且在应用程序关闭之前不会处理使用事件的对象),我是否真的需要担心取消注册这些处理程序?我能看到的唯一一个好理由是,如果事件被解雇你可能会有一些额外的开销,你不必关心(即你有多个处理程序注册到一个事件).还有其他好的理由吗?任何人都遇到重大问题,因为他们没有取消注册事件?
我试图设置ReadFile为异步运行,根据MSDN,我需要设置lpNumberOfBytesRead为null:
"如果这是一个异步操作,请为此参数使用NULL,以避免可能出现的错误结果."
例如,如果我有以下内容:
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool ReadFile(
IntPtr hFile,
out byte[] aBuffer,
int cbToRead,
IntPtr cbThatWereRead,
ref OVERLAPPED pOverlapped
);
Run Code Online (Sandbox Code Playgroud)
我这样称呼它(意图使第4个参数为null):
Win32API.ReadFile(readHandle, out data_read, Win32API.BUFFER_SIZE, IntPtr.Zero, ref over_lapped);
Run Code Online (Sandbox Code Playgroud)
是否与使用null调用它相同?如果没有,我应该在声明或函数调用本身中更改什么?
我也好奇,如果我应该使用SafeHandle或HandleRef代替IntPtr的hFile参考?我知道CloseHandle(IntPtr)当我完成它时确保关闭手柄,只是不确定是否有任何其他理由使用其他两个选项IntPtr.我也在努力避免使用不安全的代码.
编辑:事实证明,我不应该设置第四个参数IntPtr.Zero,因为即使我异步运行,它仍然可以立即返回.见异步磁盘I/O.啊,我喜欢自相矛盾的故事.
这是我运行的例子.它具有相同的Mode,Padding,BlockSize,KeySize.我使用相同的init向量,密钥和数据.
使用RijndaelManaged产生加密值:0x8d,0x81,0x27,0xc6,0x3c,0xe2,0x53,0x2f,0x35,0x78,0x90,0xc2,0x2e,0x3b,0x8a,0x61,0x41,0x47,0xd6,0xd0,0xff ,0x92,0x72,0x3d,0xc6,0x16,0x2b,0xd8,0xb5,0xd9,0x12,0x85
使用AesCryptoServiceProvider生成加密值:0x8d,0x9f,0x6e,0x99,0xe9,0x54,0x8b,0x12,0xa9,0x88,0x1a,0x3d,0x65,0x23,0x9c,0x4e,0x18,0x5a,0x89,0x31,0xf5 ,0x75,0xc5,0x9e,0X0D,0x43,0xe9,0x86,0xd4,0xf3,0x64,0x3a
这是我用来生成这些结果的代码
public partial class AesTest
{
private SymmetricAlgorithm mEncryptionType;
private byte[] mPrivateKey;
private byte[] mInitializationVector;
private byte[] mData;
public AesTest()
{
mPrivateKey = new byte[32]
{
0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22
};
mInitializationVector = new byte[16]
{
0x33, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, …Run Code Online (Sandbox Code Playgroud) 似乎.NET 4.0中有很多与并发相关的改进可能依赖于并发优先级队列.框架内是否有可靠的优先级队列实现可供重用?
我正在用C#开发一个WinForms应用程序.我在GUI编程方面经验有限,而且我必须在飞行中学到很多东西.话虽这么说,这就是我正在建设的.
请参阅常规GUI查看以下链接:
GUI http://img227.imageshack.us/img227/1084/program0.jpg
现在,我已经完成了很多工作,但是在非常糟糕的自治设计模式中.我不知道该项目是否会达到一定的规模,因此,是时候进行一些重大的重构了.
我一直在研究GUI设计模式,我希望实现的模式是被动视图(参见http://martinfowler.com/eaaDev/PassiveScreen.html).我正在寻找一些如何将这些结合在一起的帮助.
背景:
1)根据用户在"TreeView"中单击的内容,左下角的"列表"将显示可填充"编辑器"区域的对象列表.这些对象可能是TextBox或DataGridView.用户切换列表以选择他/她想要在"编辑器"中看到的内容
2)该模型本质上是一个包含数据和配置文件的文件夹.有一个外部程序在给定目录上运行,创建输出文件/文件夹等.我正在开发的这个程序旨在以用户友好的方式有效地管理/配置这些对象
3)我一直在做的事情的问题是它几乎不可能测试,因此转向MVP-esque被动视图设计模式
我试图让它成为独立于View的程序.我无法找到任何更复杂的交互式视图与被动视图模式一起使用的示例.
问题:
1)我是否需要为程序的整个"外观"实现一个大的接口/视图,然后为每个TreeView,Editor,Logger等实现子接口/子视图?或者这样做有更好的"结构"吗?
2)当从视图"移交"事件到演示者/控制器时(无论你想使用什么术语WRT被动视图设计模式),我应该这样做的方式是什么?有时我有简单的属性需要更新,有时我需要一系列的步骤来展开.
我会喜欢这个主题的建议和意见.我已经浏览了互联网,但我没有找到足够的例子来帮助我继续这个项目.
提前致谢!
丹尼尔
我有多个单词我想用值替换,最好的方法是什么?
示例:这就是我所做的,但感觉和看起来都错了
string s ="Dear <Name>, your booking is confirmed for the <EventDate>";
string s1 = s.Replace("<Name>", client.FullName);
string s2 =s1.Replace("<EventDate>", event.EventDate.ToString());
txtMessage.Text = s2;
Run Code Online (Sandbox Code Playgroud)
一定有更好的方法?
谢谢
说我有一个字符串
string var = "This is a test";
Run Code Online (Sandbox Code Playgroud)
然后我想使用这个字符串来创建一个XElement实例,如:
XElement element = XElement.Load(var);
Run Code Online (Sandbox Code Playgroud) c# ×9
.net ×2
wpf ×2
asynchronous ×1
concurrency ×1
contextmenu ×1
encryption ×1
events ×1
file-io ×1
mvp ×1
passive-view ×1
treeview ×1