小编Win*_*ith的帖子

用于轮询窗口服务的计时器

我编写了一个Timer类,以便在轮询另一个系统的Windows服务中使用它.我这样做是因为我有两个问题System.Timers.Timer没有解决.

  1. Elapsed EventHanler在后台运行,因此如果主线程结束,它的执行将中止.我希望该System.Timers.Timer.Stop函数阻止主线程,直到Elapsed EventHanler的执行结束.
  2. System.Timers.Timer不处理事件再入.我希望Interval介于两个Elapsed EventHanler之间,这样如果之前的调用(+ interval)还没有完成,Timer就不会调用Elapsed EventHanler.

在编写课程时,我发现我需要解决一些与thrading相关的问题,因为我不太熟悉那些我想知道以下Timer类是否是线程安全的?

public class Timer
{
    System.Timers.Timer timer = new System.Timers.Timer() { AutoReset = false };
    ManualResetEvent busy = new ManualResetEvent(true);

    public double Interval
    {
        get { return timer.Interval; }
        set { timer.Interval = value; }
    }

    public Timer()
    {
        timer.Elapsed += new ElapsedEventHandler(TimerElapsed);
    }

    void TimerElapsed(object sender, ElapsedEventArgs e)
    {
        try
        {
            busy.Reset();
            OnElapsed(e);
            timer.Start();
        }
        finally
        {
            busy.Set();
        }
    }

    public event EventHandler Elapsed;

    protected void …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading timer

3
推荐指数
1
解决办法
9771
查看次数

聪明的算法,用于查找数字总和等于数字显示中的段数的时间

所以,我的朋友今天早上给我发了一个谜题:

查找一天中不同时间的数量(使用24小时显示并假设早晨时间显示为8:15而不是08:15),其中段的数量等于数字的总和.例如.8:15电子格式有7 + 2 + 5 = 14段,数字之和为8 + 1 + 5 = 14,因此符合条件.

所以我在C#3.0中提出了以下简单(但是迟钝的暴力)解决方案:

// Number of segments in each digit
var digitMap = 
    new Dictionary<char, int>
    {
        {'0',6},{'1',2},{'2',5},{'3',5},{'4',4},
        {'5',5},{'6',5},{'7',3},{'8',7},{'9',5}
    };

var numMatches = (
            from h in Enumerable.Range(0,24)
            from m in Enumerable.Range(0,60)
            select h.ToString() + m.ToString().PadLeft(2,'0') into t 
            let chars = t.ToCharArray()
            where chars.Sum(c => int.Parse(c.ToString())) == chars.Sum(c => digitMap[c])
            select t).Count();
Run Code Online (Sandbox Code Playgroud)

但是,他补充说:

不允许使用蛮力方法.

我已经考虑了一段时间了,我正在努力想出一个更聪明的算法.我正落预滤波的不可能性的路径(例如倍,其中的数字的总和是小于6,因为这是最小段总和) - 但最终我假定只会导致更小的解空间,然后是暴力强迫.

无论如何,我认为把它扔出去是一个有趣的问题,看看是否有人能想出一个更聪明的方法.

c# language-agnostic puzzle algorithm

3
推荐指数
1
解决办法
1234
查看次数

C#中的开源C#编译器?

有没有用C#编写的开源C#编译器?

我知道Blue,但它是在2001年写的,只支持C#1:

理想情况下,我正在寻找一个支持C#3.0的 - 但即使2.0也没关系.

c# compiler-construction open-source

0
推荐指数
2
解决办法
418
查看次数

为什么不能在列表中添加字符串?

我们知道如果我们为列表声明泛型类型,我们可以在列表中添加字符串和整数.但代码似乎没有添加字符串.有什么问题我无法理解..

class GHJ{String s;GHJ(String s){this.s=s;}}

class DFR{
    public static void main(String[] g){
        List<? extends Object> list=new ArrayList();
        list.add((new String("ffg")));// compiler error
        list.add("df");// compiler error
        list.add("sdd");// compiler error
        list.add(new GHJ("dff"));// compiler error
        String s= list.get(0);// compiler error
        System.out.println(list+" "+s);
    }   
}
Run Code Online (Sandbox Code Playgroud)

java generics

0
推荐指数
1
解决办法
3879
查看次数