我需要广播一个可以在Windows CE 5设备上运行的任何应用程序拾取的事件.
之前没有这样做,所以我有兴趣了解人们会建议看哪些技术,如果有什么我没有考虑过.
需要接收此事件的所有应用程序都是基于.NET Compact Framework的,因此可以考虑"仅管理"解决方案.
我在.NET Compact Framework 3.5中使用SQL Server CE 3.5和C#.在我的代码中,我插入一行,然后启动一个事务,然后从表中删除该行,然后对该事务进行回滚.但这并没有撤消删除.为什么不?这是我的代码:
SqlCeConnection conn = ConnectionSingleton.Instance;
conn.Open();
UsersTable table = new UsersTable();
table.DeleteAll();
MessageBox.Show("user count in beginning after delete: " + table.CountAll());
table.Insert(
new User(){Id = 0, IsManager = true, Pwd = "1234", Username = "Me"});
MessageBox.Show("user count after insert: " + table.CountAll());
SqlCeTransaction transaction = conn.BeginTransaction();
table.DeleteAll();
transaction.Rollback();
transaction.Dispose();
MessageBox.Show("user count after rollback delete all: " + table.CountAll());
Run Code Online (Sandbox Code Playgroud)
消息表明一切都按预期工作,直到表的计数为0表示回滚未撤消删除.
在SQL Compact Edition 3.5中,请注意它是我所说的Compact Edition -有没有办法将行数限制为仅2?像使用LIMIT或TOP的东西.我真的不想对SqlCEDataReader或SqlCEResultSet使用任何东西.我想在查询中做所有限制.这可能吗?我环顾四周,似乎并非如此.
编辑-
为了回应Dave Swersky的数据请求并在某些列上使用Min()/ Max()作为获得前2行的方法,这里有一些样本(已消毒的)数据:
Line Site Function Status
1010 Las Vegas new 4
1020 DC send 1
1030 Portland copy 1
1040 SF copy 1
1050 Portland copy 1
1060 DC send 1
Run Code Online (Sandbox Code Playgroud)
*列数多于此,但这些是重要的.
很抱歉缺乏直观的数据(但实际数据更不直观!),但为了安全起见,我需要更改数据.
所以我需要确定:记录在前一行中的位置,以确定需要拾取的位置.
任何给定行上的站点(函数='new'的第一行除外)对应于项目下一步的位置.所以简单地从同一条线上抓住那个网站就不会告诉我它来自哪里.状态将始终为1或4. 4对应于已经交付的位置,因此我不希望在结果中包含这些记录.但它可能有助于获得取件网站.
对于这个数据表,我希望查询返回对应于第一行上方的行的状态为1的站点.因此,它将是拉斯维加斯.
我正在尝试编写与以下内容等效的C#:
typedef struct BATT_ID
{
UINT8 nBattID[8];
} BATT_ID, *PBATT_ID;
HANDLE g_hDevice;
// Connect to the driver
g_hDevice = CreateFile(L"BAT1:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
void GetBattID(PBATT_ID pBattId)
{
// ... snipped code to check g_hDevice is valid ...
DeviceIoControl(g_hDevice, SOMO650_PWR_GET_BATT_ID, NULL, 0, pBattId, sizeof(BATT_ID), dwByteReturn, NULL))
}
// once BATT_ID has been filled it can be formatted as follows
wsprintf(strInfo, TEXT("%02X:%02X:%02X:%02X:%02X:%02X"), BattID.nBattID[6], BattID.nBattID[5], BattID.nBattID[4], BattID.nBattID[3], BattID.nBattID[2], BattID.nBattID[1]);
Run Code Online (Sandbox Code Playgroud)
代码连接到Windows Mobile设备的电源驱动程序并尝试检索电池ID.
这是针对SoMo650和Socket的最新ROM版本,只能在C中提供示例代码.
除了调用DeviceIoControl,我可以成功地完成所有事情(尽我所知),因为我不知道如何将BATT_ID结构转换为C#.
我猜这是因为它是一个结构,而DeviceIoControl期望一个指针我应该看着Marshal.PtrToStructure(),但我的C经验非常少,感觉非常深刻.
任何协助将不胜感激.
我有一个窗口移动应用程序,它需要检测电源关闭并在设备关闭之前执行一些操作.
我已经能够检测到设备正在使用pinvoke关闭到RequestPowerNotifications win32 api.
但是,我无法弄清楚如何阻止电源关闭足够长的时间来运行我的代码.
我在Pocket PC 2003(Visual Studio 2005)的.NET CF 2.0项目中遇到了一些奇怪的事情.我正在处理一个System.IO.Stream对象,发现IDE不会自动完成该Dispose()方法.我手动输入并收到:
由于其保护级别,'System.IO.Stream.Dispose(bool)'无法访问
错误是指受保护的Dispose(bool)方法.Dispose()是私人的还是不存在的.
问题1:这怎么可能?Stream实施IDisposable:
public abstract class Stream : MarshalByRefObject, IDisposable
Run Code Online (Sandbox Code Playgroud)
......并且IDisposable需要一种Dispose()方法:
public interface IDisposable
{
void Dispose();
}
Run Code Online (Sandbox Code Playgroud)
我知道编译器不会让我在我的代码中侥幸逃脱.
问题2:我是否会通过直接处理我的流来解决问题?
IDisposable idisp = someStream;
idisp.Dispose();
Run Code Online (Sandbox Code Playgroud)
编译器接受隐式转换.
我有搭载Windows Mobile 6.5的Motorola MC55.这个漂亮的手掌还包含一个嵌入式条形码扫描仪.我的问题是 - 我是否需要.NET CF中的任何特殊内容才能使用条形码扫描器?我希望条形码作为普通字符串读取并作为键盘事件传递?是否需要任何特殊的.NET CF库?
感谢帮助
多米尼克
我的应用程序中有以下代码在未处理的异常之后运行:
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
var exception = e.ExceptionObject as Exception;
if (exception != null) MessageBox.Show(exception.Message + " - " + exception.StackTrace);
}
Run Code Online (Sandbox Code Playgroud)
但即使我抓住未处理的异常我的Windows移动应用程序关闭.当我捕获未处理的异常时如何防止关闭应用程序.我永远不想关闭我的应用程序.我想在这种情况下打开登录表单或其他任何不关闭应用程序的表单.
所以我想要的是防止关闭应用程序从未处理的异常,如网络关闭,...
我不能在每个代码中使用try catch ....
知道如何在网络中断或任何其他未处理的异常时阻止关闭应用程序吗?
我在网上浏览了一个简化的键盘,用于在Windows Mobile上运行的项目,但我找不到任何好东西,所以我试着自己创建一个.
遇到的基本问题,与用于实现"密钥"的控件有关,是:我需要一个控件: - 可点击 - 可以包含文本 - 不要采取焦点
我做了一些尝试,我发现LinkLabel似乎正是我所需要的:它有效.
现在,问题是:使用LinkLabel实现触摸屏键盘是一个好主意,还是这是错误的做法?我想避免使用这个键盘开发所有应用程序,然后在"太晚"时发现一些麻烦.
如何使用SharpZipLib从tar.gz(tar文件和文件夹然后gzip)中提取特定文件(或具有流式访问权限)?或者也许在.NET cf 3.5中有人有类似的库吗?
c# ×8
.net ×4
.net-2.0 ×1
barcode ×1
marshalling ×1
pinvoke ×1
sql ×1
sql-server ×1
winapi ×1
windows-ce ×1