'VB
Protected Overrides Sub OnClosing(ByVal e As CancelEventArgs)
e.Cancel = True
End Sub 'OnClosing
7.7. 如何在我的程序中调用另一个应用程序?
您可以调用本地代码的CreateProcess函数开始运行第二个程序。然后调用本地代码的WaitForSingleObject函数暂停调用的程序,直到第二个程序运行结束。以下快速入门演示了通过PocketPC模拟器来实现这一操作:
http://samples.gotdotnet.com/quickstart/CompactFramework/doc/waitforsingleobject.aspx
7.8. .net精简框架的应用程序会建立什么线程?
一个.net精简框架程序最多会产生4个线程:
一个主应用程序线程。
一个线程控制各种时间间隔,时间间隔是供系统和其他应用程序使用的。
一个线程跟踪活动的TCP/IP接口的变化(模拟Windows XP上的媒体动作,Windows CE上是没有这些操作的)。
一个执行终止对象的线程。当第一个被垃圾回收的对象回收时,就被建立了。 7.9. 如何把byte数组转换成结构体?
在C++中,通过建造类型(typecasting)可以很方便和有效的保存一个类或结构体到文件,并直接从文件中重构出来。但托管代码的本性决定了它不能这样实现。但还是有办法实现的,建立一个类,把内存中的数据作为它的属性让其他类访问。例如:
//C#
public class MyClass
{
protected byte[] m_data = null;
// uint uiDummy
// short sDummy
// This is a bit unsafe so you should throw an
// exception or assert if the byte array length is
// not 6. A safer but less memory efficient approach
// would be to set m_data = new byte[6] and then copy
//bytes to m_data.
public MyClass(byte[] bytes) {m_data = bytes;}
// Get/Set the uint
public uint uiDummy
{
get {return BitConverter.ToUInt32(m_data, 0);}
set
{
Buffer.BlockCopy(BitConverter.GetBytes(value),0,m_data,0,BitConverter.GetBytes(value).Length);
}
}
// Get/Set the short
public short sDummy
{
get {return BitConverter.ToInt16(m_data, 4);}
set
{
Buffer.BlockCopy(BitConverter.GetBytes(value),0,m_data,4,BitConverter.GetBytes(value).Length);
}
}
}
byte[] fromFile = {1,1,1,1,2,2};
MyClass myClass = new MyClass(fromFile);
uint test1 = myClass.uiDummy; // 0x1010101
short test2 = myClass.sDummy; // 0x202
myClass.sDummy = 0x0505; // Test setting the short
uint test4 = myClass.uiDummy; // 0x1010101
short test5 = myClass.sDummy; // 0x505
'VB
Public Class ByteClass
Protected m_data As Byte() = Nothing
' uint uiDummy
' short sDummy
' This is a bit unsafe so you should throw an exception
' or assert if the byte array length is not 6. A safer
' but less memory efficient approach would be to set
' m_data = new byte[6] and then copy bytes to m_data.
Public Sub New(ByVal bytes() As Byte)
m_data = bytes
End Sub 'New
' Get/Set the uint
Public Property uiDummy() As UInt32
Get
Return BitConverter.ToUInt32(m_data, 0)
End Get
Set(ByVal Value As System.UInt32)
Buffer.BlockCopy(BitConverter.GetBytes(Value),0,m_data,0,BitConverter.GetBytes(Value).Length)
End Set
End Property