我有一个计时器对象.我想让它每分钟都运行一次.具体来说,它应该运行一个OnCallBack
方法,并在OnCallBack
方法运行时变为非活动状态.一旦OnCallBack
方法完成,它(a OnCallBack
)重新启动计时器.
这就是我现在所拥有的:
private static Timer timer;
private static void Main()
{
timer = new Timer(_ => OnCallBack(), null, 0, 1000 * 10); //every 10 seconds
Console.ReadLine();
}
private static void OnCallBack()
{
timer.Change(Timeout.Infinite, Timeout.Infinite); //stops the timer
Thread.Sleep(3000); //doing some long operation
timer.Change(0, 1000 * 10); //restarts the timer
}
Run Code Online (Sandbox Code Playgroud)
但是,似乎没有用.它每3秒运行一次非常快.即使提高了一段时间(1000*10).它似乎对此视而不见1000 * 10
我做错了什么?
接口中的C#方法在不使用virtual
关键字的情况下声明,并在派生类中重写而不使用override
关键字.
是否有一个原因?我认为它只是一种语言方便,显然CLR知道如何处理这个问题(默认情况下方法不是虚拟的),但还有其他技术原因吗?
以下是派生类生成的IL:
class Example : IDisposable {
public void Dispose() { }
}
.method public hidebysig newslot virtual final
instance void Dispose() cil managed
{
// Code size 2 (0x2)
.maxstack 8
IL_0000: nop
IL_0001: ret
} // end of method Example::Dispose
Run Code Online (Sandbox Code Playgroud)
请注意,该方法virtual
final
在IL中声明.
我有一个相对模糊的要求,但感觉应该可以使用BCL.
对于上下文,我正在Noda Time中解析日期/时间字符串.我为输入字符串中的位置维护一个逻辑光标.因此,虽然完整的字符串可能是"2013年1月3日",但逻辑光标可能位于"J".
现在,我需要解析月份名称,将其与文化的所有已知月份名称进行比较:
在当前的代码做这个工作通常使用CompareInfo.Compare
.它实际上是这样的(仅用于匹配部分 - 在真实的东西中有更多的代码,但它与匹配无关):
internal bool MatchCaseInsensitive(string candidate, CompareInfo compareInfo)
{
return compareInfo.Compare(text, position, candidate.Length,
candidate, 0, candidate.Length,
CompareOptions.IgnoreCase) == 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,这取决于候选人和我们比较的区域长度相同.大部分时间都很好,但在某些特殊情况下并不好.假设我们有类似的东西:
// U+00E9 is a single code point for e-acute
var text = "x b\u00e9d y";
int position = 2;
// e followed by U+0301 still means e-acute, but from two code points
var candidate = "be\u0301d";
Run Code Online (Sandbox Code Playgroud)
现在我的比较会失败.我可以用IsPrefix
: …
我正在寻找一个好的免费工具的建议,用于生成样本数据以便加载到测试数据库中.通过类比,可以为任何RDBMS 生成" lorem ipsum "文本.我正在寻找的功能包括:
INSERT
语句)生成,或者以适合批量导入的平面文件格式生成(通常更快).PS:我确实在StackOverflow上搜索了一个重复的问题,但我没找到.如果有的话,我会很高兴得到一个指针.
感谢大家的响应!我应该修改我的要求,即我使用Mac OS X作为我的主要开发环境,而不是Windows(虽然我确实说命令行界面是可取的,而且实际上排除了Windows).不过,特定于Windows的建议无疑会对这个问题的其他读者有用,所以,谢谢.
这是我的结论:
我真的不明白模数除法是如何工作的.我正在计算27 % 16
和结束11
,我不明白为什么.
我似乎无法在网上找到外行人的解释.有人可以详细说明这里发生了什么吗?
我想列出该目录的目录和子目录中包含的每个文件和目录.如果我选择C:\作为目录,程序将获得它有权访问的硬盘驱动器上的每个文件和文件夹的每个名称.
列表可能看起来像
fd\1.txt fd\2.txt fd\a\ fd\b\ fd\a\1.txt fd\a\2.txt fd\a\a\ fd\a\b\ fd\b\1.txt fd\b\2.txt fd\b\a fd\b\b fd\a\a\1.txt fd\a\a\a\ fd\a\b\1.txt fd\a\b\a fd\b\a\1.txt fd\b\a\a\ fd\b\b\1.txt fd\b\b\a
是否可以编写专为iOS设备(iPad,iPhone,iPod Touch)设计的HTML5 Web应用程序,它允许用户从文件系统上传图像?
想象一下,通过网络应用程序将新照片上传到您的Twitter头像.
这就是我所知道的
str = String.Format("Her name is {0} and she's {1} years old", "Lisa", "10");
Run Code Online (Sandbox Code Playgroud)
但我想要类似的东西
str = String("Her name is @name and she's @age years old");
str.addParameter(@name, "Lisa");
str.addParameter(@age, 10);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Silverlight ADO.Net数据服务客户端api(以及Linq To Entities)创建一个使用where子句中的id列表的查询.有没有人知道Contains不受支持的解决方法?
我想做这样的事情:
List<long?> txnIds = new List<long?>();
// Fill list
var q = from t in svc.OpenTransaction
where txnIds.Contains(t.OpenTransactionId)
select t;
Run Code Online (Sandbox Code Playgroud)
试过这个:
var q = from t in svc.OpenTransaction
where txnIds.Any<long>(tt => tt == t.OpenTransactionId)
select t;
Run Code Online (Sandbox Code Playgroud)
但得到"方法'任何'不受支持".
每当我在Xcode中创建一个新的.cpp/.h文件时,评论就会添加到文件的顶部.例如:
/*
* <file>.cpp
* <Name of project>
*
* Created by <My name> on <Date>.
* Copyright <Year and company>. All rights reserved.
*
*/
Run Code Online (Sandbox Code Playgroud)
我想将默认注释更改为另一个许可证,如GPL/LGPL /或其他.有什么地方我可以在Xcode中改变这种行为吗?