在.NET中,是否有一种方法(如事件)用于检测控制台应用程序何时退出?我需要清理一些线程和COM对象.
我正在从控制台应用程序运行一个没有表单的消息循环.我正在使用的DCOM组件似乎要求应用程序泵消息.
我已经尝试向Process.GetCurrentProcess.Exited和Process.GetCurrentProcess.Disposed添加一个处理程序.
我还尝试向Application.ApplicationExit和Application.ThreadExit事件添加处理程序,但它们没有触发.也许那是因为我没有使用表格.
在我的新代码中,我没有使用字符串来传递目录路径或文件名.相反,我使用DirectoryInfo和FileInfo,因为它们似乎封装了大量信息.
我已经看到很多代码使用字符串来传递目录信息然后他们在长难以理解的语句中"分裂","中"和"instr",直到他们获得他们正在寻找的目录的一部分.
将路径作为字符串传递是否有充分的理由?
有没有一种方法可以在控件DoubleClick事件中获取鼠标光标的(x,y)坐标?
据我所知,这个位置必须从全球获得:
Windows.Forms.Cursor.Position.X, Windows.Forms.Cursor.Position.Y
另外,有没有一种方法可以获得哪个按钮产生了双击?
我有一个VB.NET项目,我可以使用索引迭代键和值字典对象的集合:
MyDictionary.Keys(idx)
MyDictionary.Values(idx)
Run Code Online (Sandbox Code Playgroud)
当此代码从测试项目中获取并放入实际项目时,我收到以下错误:
'System.Collections.Generic.Dictionary(Of Double,String).KeyCollection'无法编入索引,因为它没有默认属性.
和
'System.Collections.Generic.Dictionary(Of Double,String).ValueCollection'无法编入索引,因为它没有默认属性.
这是使用VB.NET和VS 2008.我不知道从一个项目到下一个会导致此错误的项目有什么区别.测试是一个控制台应用程序,该程序是一个winforms应用程序.
什么条件会导致这些集合的默认属性发生变化?
编辑 - 感谢所有答案,告诉我如何循环字典.然而,这些答案并没有回答我为什么可以在一个项目中使用索引而不在另一个项目中使用索引的问题.我是否应该无法将代码从一个.net项目复制并粘贴到另一个.net项目并使其工作相同?并且,不,选项严格,不是问题的原因.
编辑 - 尝试重现我所看到的内容:
Imports System.Collections
Imports System.Collections.Generic
Module Module1
Public dtf As Dictionary(Of Double, String)
Public Sub BuildDictionary()
dtf = New Dictionary(Of Double, String)
dtf.Add(1.0, "1")
dtf.Add(0.0, "0")
End Sub
Public Sub Search()
For idx As Integer = 0 To dtf.Keys.Count - 1
If dtf.Keys(idx) = 0 Then
Exit Sub
End If
Next
End Sub
Sub Main()
End Sub
End …
Run Code Online (Sandbox Code Playgroud) 是否有预定义或"简单"的方法将数据表写入文本文件或TextBox控件(使用等宽字体),如DataTable.Print():
Column1| Column2| --------|--------| v1| v2| v3| v4| v5| v6|
编辑
这是一个初始版本(vb.net) - 如果有人有兴趣或想要建立自己的版本:
Public Function BuildTable(ByVal dt As DataTable) As String
Dim result As New StringBuilder
Dim widths As New List(Of Integer)
Const ColumnSeparator As Char = "|"c
Const HeadingUnderline As Char = "-"c
' determine width of each column based on widest of either column heading or values in that column
For Each col As DataColumn In dt.Columns
Dim colWidth As Integer = Integer.MinValue
For Each row As …
Run Code Online (Sandbox Code Playgroud) 我有一个64位的VB.NET应用程序,并希望分配一个> 2GB的缓冲区.
在下面的代码中,"new"和"ReDim"都抛出"OverflowException".
当这些函数只接受带符号的32位值时,如何分配> 2GB的缓冲区?
(这可能在C#中?)
编辑 - 我正在运行带有4GB RAM的WinXP 64.
Dim width As Long = 19005 Dim height As Long = 32768 Dim buffer() As Byte = New Byte((width * height * 4) - 1) {} Dim size As Long = (width * height * 4) - 1 ReDim buffer(size)
什么是HTTP'获取'安全最佳实践?
HTTP Get get查询字符串值何时应该被遮挡?
编辑 - 我继承的应用程序具有XOR'加密'的所有查询字符串参数.它还在查询字符串中传递类似AccountID的内容.所以我想知道这些是不是很好的做法以及如果不这样做我会如何纠正这些事情.
编辑 -
我可以用来解决这个问题的一种方法是创建一个基类(这只是伪代码):
public mustinherit class QSBase
public shared Unique as long = 0
private m_ID as string
public readonly property ID
get
return m_ID
end get
end property
public sub new()
m_ID = Unique 'somehow get a unique value for this querystring
Unique += 1
end sub
public function IDQueryString() as string
return "ID=" & m_ID
end function
end class
Run Code Online (Sandbox Code Playgroud)
然后,对于应用程序中的每个页面,我将创建一个具有每个查询字符串值的属性的派生类.
public class QSPage1
inherits QSBase
private m_AccountID as string
public readonly …
Run Code Online (Sandbox Code Playgroud) 是否最好将枚举值或枚举名称存储在数据库表字段中?
例如,我应该将'TJLeft'存储为字符串或它在数据库中的等效值吗?
Public Enum TextJustification
TJLeft
TJCenter
TJRight
End Enum
Run Code Online (Sandbox Code Playgroud)
我目前正倾向于这个名字,因为有些人可能会在以后明确指定一个不同的值.
编辑 -
一些枚举在我的控制之下,但有些来自第三方.
我已经创建了一个同步队列,并在调用Enqueue/Dequeue方法时在该队列的SyncRoot属性上使用SyncLock.从标准生产者/消费者类的实例调用这些方法.
这是SyncRoot属性的正确使用吗?
更好的做法是在每个类中创建一个私有共享对象并锁定它吗?
请解释一下你的推理.