小编use*_*141的帖子

61次运行后,定期计时器意外停止

以下直接定期计时器(应无限运行)在61次运行后停止.如果我改为.FromMinutes(10):

static void Main(string[] args) {
    var timerEvery5 = new Timer(
            new TimerCallback((o) => Console.WriteLine("5-minutes handler launched at {0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm"))),
            null,
            new TimeSpan(0), // first run immediately
            TimeSpan.FromMinutes(5)); // then every 5 minutes
    for (; ; )
        Thread.Sleep(23457);
}
Run Code Online (Sandbox Code Playgroud)

我在几台带有.Net 4.5的Windows 8 64位系统上试过它.该程序是从命令shell编译和运行的.这是一个错误还是我错过了什么?

c#

6
推荐指数
1
解决办法
343
查看次数

System.Data.SQLite对System.Int32错误地键入了无符号的int字段

使用System.Data.SQLite,我正在创建一个包含无符号整数列的表:

@"CREATE TABLE widgets (" +
    @"id unsigned integer(10) PRIMARY KEY, " +
    @"fkey unsigned integer(10), " + ...
Run Code Online (Sandbox Code Playgroud)

然后插入像这样的值

INSERT INTO widgets (id, fkey, ...) VALUES (4294967295, 3456, ...
Run Code Online (Sandbox Code Playgroud)

但是,循环遍历此表的行和列,我发现它row["id"]具有类型System.Int32(而不是UInt32),并且毫不奇怪,4294967295被解释为-1.实际上,表中的所有unsigned int字段(不仅主键id被错误地键入System.Int32)

同时,SQLite类型规范说整数存储在1,2,3,4,6或8个字节中,具体取决于值的大小.4294967295 = 0xFFFFFFFF只适合四个字节.它似乎与SQLite的所谓"动态类型"不一致.当我插入大于4294967295的正值时,类型仍然存在System.Int32.

这是一个错误还是一个功能?

PS1:

我的表包含1行,列id = 2 ^ 32-1 = 4294967295(或更大),我打印所有列的类型

public void PrintDataTypes(DataTable dt) {
    foreach (DataRow row in dt.Rows) {
        foreach (DataColumn col in dt.Columns)
            Console.WriteLine("name={0}, type={1}", 
                               col.ToString(),
                               row[col].GetType().ToString());
        return; // after 1st …
Run Code Online (Sandbox Code Playgroud)

c# sqlite unsigned-integer

6
推荐指数
1
解决办法
946
查看次数

标签 统计

c# ×2

sqlite ×1

unsigned-integer ×1