- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个投票类
class Poll
{
public string question { get; set; }
public Timer pollTimer { get; set; }
public List<string> userVoted { get; set; }
public Dictionary<string, int> choices { get; set; }
public bool PollRunning { get; set; }
public Poll(string question,Dictionary<string,int> choices)
{
this.question = question;
this.choices = choices;
this.pollTimer = new Timer(15000);
this.PollRunning = true;
this.userVoted = new List<string>();
}
public string pollResults()
{
string temp = "";
foreach (KeyValuePair<string, int> keyValuePair in choices)
{
temp = temp + keyValuePair.Key + " " + keyValuePair.Value + ", ";
}
return string.Format("Poll Results: {0}", temp);
}
}
我在 StartPool 方法中有这段代码
static Dictionary<Channel, Poll> polls = new Dictionary<Channel, Poll>();
public void startPool(Channel channel)
{
polls.Add(channel, new Poll(question, tempdict));
polls[channel].pollTimer.Elapsed += new ElapsedEventHandler(pollTimer_Elapsed);
polls[channel].pollTimer.Start();
}
当这个方法被调用时
static void pollTimer_Elapsed(object sender, ElapsedEventArgs e)
{
//do stuff to the poll that called this.
}
我需要知道哪个轮询对象的计时器正在调用此方法所以我可以做 polls[channel].pollTimer.Stop();并进行民意调查[ channel ].pollResults();
事实上,我不知道该运行时停止哪个轮询并发布结果
如果对您有帮助,我愿意发布完整的解决方案。
最佳答案
您设计 Poll 类的方式存在的问题是 Poll 类没有完全完成它的工作。您需要其他类知道如何开始和停止轮询,这意味着一半的轮询实现在 Poll 类内部,一半的实现在 Poll 类之外。如果您要创建一个 Poll 类,请对其他人隐藏所有实现细节。
这就是我的意思。我会像这样在 Poll 中创建一个事件:
public event EventHandler<ElapsedEventArgs> Elapsed;
在 Poll 的构造函数中,添加这一行:
this.pollTimer.Elapsed += pollTimer_elapsed;
pollTimer_elapsed 看起来像这样:
private void pollTimer_elapsed(object sender, ElapsedEventArgs e)
{
var han = this.Elapsed;
if (han != null)
han(this, e); // Fire the Elapsed event, passing 'this' Poll as the sender
}
在Poll中添加一个新的公共(public)方法来启动定时器:
public void Start()
{
this.pollTimer.Start();
}
现在您的 startPool 方法如下所示:
public void startPool(Channel channel)
{
polls.Add(channel, new Poll(question, tempdict));
polls[channel].Elapsed += poll_Elapsed;
polls[channel].Start();
}
static void poll_Elapsed(object sender, ElapsedEventArgs e)
{
//sender is now a Poll object
var poll = sender as Poll;
// Now you can do poll.pollTimer.Stop()
// Or better yet, add a Stop method to the Poll class and call poll.Stop()
}
恕我直言,这种方法稍微好一些,因为 Poll 对象对外部对象隐藏了更多的实现。从 startPool 的角度来看,Poll 类更易于使用,并且您也不需要 Poll 类之外的任何内容来了解 Timers。
关于c# - 包含带有计时器的对象的字典。需要找出哪个对象的定时器正在调用 elapsed 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7624611/
我对这 4 个完全困惑。ElapsedMilliseconds (long)、ElapsedTicks (long)、Elapsed.TotalMilliseconds (double) 和 Elap
我已经包含了 System.Timers 包,但是当我输入时: Timer.Elapsed; //its not working, the property elapsed is just not t
我有一个要使用的 System.Timers.Timer 对象,但我不希望绑定(bind)到 Timer 的处理干扰普通到高优先级线程。换句话说,我想说我想每 5 秒处理一次 X,只要没有其他东西在运
在我的应用程序中,有时我需要手动调用我的计时器。 我试过以下方法: int originalInterval = t.Interval; t.Interval = 0; t.Interval = or
我有一个页面,我在其中触发 ajax 请求并在用户按下按钮后的前 6 秒内显示加载标志: var startTime=(new Date).getTime(); function
我想为每个对象分配不同的计时器。 每个对象都包含 Timer 作为类成员。 这就是我尝试过的: private void EntityTimeElapsed(object sender, MyEnti
我正在使用 Windows 窗体。我正在使用 System.Timers.Timer 。虽然我用 timer.Stop() 停止了计时器,但它仍然会多一点。我放了一些 bool 变量来防止这种情况但没
我正在使用 LabVieW 计算电路的电容。我试图得到它两端的电压达到2.5V后的时间。我提供5V电源。我使用了逻辑运算符并将其连接到耗时组件的重置。但随着时间重置,我得到了零。我想知道实际耗时。 电
我必须在大学做一个小作业: 我有一台运行“n”个独立服务的服务器。过去所有这些服务都是同时启动的。每个服务“i”都会在一定时间“s[i]”(以秒为单位)后将“b[i]”行写入服务器上的日志文件。输入由
我有这个投票类 class Poll { public string question { get; set; } public Timer pollTimer { get; set;
以下类来自 .Net Windows 服务。 DoSomeDatabaseStuff 方法在第一次启动时需要 10 分钟,但当时间过去后,不会再次调用此方法。 public class Test {
Timers.Timer 来创建秒表。我使用 Timer.Elapsed 来处理在特定时间后显示时间的事件。我给定时器间隔 1 并启用为真。我还将 AutoReset 设置为 true。但问题是事件只
我有一个计时器,我想知道它是否有效以测试它是否是计时器第一次引发经过的事件(我想在第一次引发经过的事件后更改 Interval 属性) _timer = new Timer(1000)
我有一个 Backgroundworker,它从数据库中收集大量数据。我想在线程上设置一个超时限制,这样如果它在设定的时间后没有返回结果,进程就会被取消。 我在启动 BackgroundWorker
ElapsedTicks & Elapsed.Ticks 是 Stopwatch 的属性,我觉得应该是一样的。如果它们相同,为什么它们应该给出不同的输出? 代码: Stopwatch spwt = S
我正在使用 Windows 窗体应用程序并拥有一个使用 System.Timers.Timer 定期检查数据库数据的管理器类。 如何将计时器 Elapsed 事件处理程序中发生的异常传递给主应用程序?
我正在使用 System.Timers.Timer 类创建一个带有 Timer.Elapsed 事件的计时器。问题是 Timer.Elapsed 事件仅在间隔时间过去后才第一次触发。 有没有办法在启动
我有一个获取音频的脚本。我想将该频率与歌曲的确切时间联系起来。我可以获取 webkitAudioContext currentTime 属性,但这并不准确,因为它在歌曲开始之前将声音保存在缓冲区中时开
我有下面的代码来获取当前时间戳并计算最后时间戳的耗时(以分钟为单位),我想知道是否可以进一步针对生产进行优化 public static Timestamp getTimestamp() {
我正在尝试获取在响应式(Reactive)编程中从 Redis 读取数据的执行时间,在查找文档时我可以看到 elapsed() 方法将执行相同的操作并实现如下代码。 Flux.fromIterable
我是一名优秀的程序员,十分优秀!