【问题标题】:Error calling non-static method调用非静态方法时出错
【发布时间】:2017-06-15 22:38:58
【问题描述】:

我有这个计时器

System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimerMethod);
aTimer.Interval = 5000;
aTimer.Enabled = true;

但是当我在定时器代码中调用这个方法时,

private void OnTimerMethod(object sender, ElapsedEventArgs e)
{
    Response.Write("text");
}

我收到此错误消息

System.Web.dll 中出现“System.Web.HttpException”类型的异常,但未在用户代码中处理

我该如何解决这个问题?

更新:
我知道我做错了,但我怎样才能做到这一点?

提前致谢

【问题讨论】:

  • 没有足够的 context 给你一个合理的答案。对于初学者,您如何调用方法OnTimerMethod?显示一些代码。我们不需要一切,但我们确实需要比您迄今为止发布的更多。
  • 在大多数 Web 编程中,响应上下文将在诸如计时器回调之类的事情发生时早已不复存在。您不能只在任意时间从任意线程写入 Web 响应。您实际上想在这里做什么?我怀疑这是一个 X/Y 问题。您是在向我们询问 Y,但在我们了解您实际尝试实现(X)之前,帮助您解决 Y 问题可能只会进一步误导您。就像有人抱怨他们不能很容易地敲入螺丝(不是钉子),所以我们给了你一把更大的锤子。
  • @Tim ,我已经在代码中调用了,你可以搜索一下,这个方法每5秒调用一次,你可能错过了。
  • 我没有看到任何显式调用该方法的代码。这确实是一个 XY 问题,我建议您编写您真正需要的任何内容,而不是尝试将数据缓慢地提供给 Web 客户端,这可以,但不能直接进行 Web 调用。
  • 非常明确地说:如果您的意图是将提要文本滴到正在进行的网络响应中,这是行不通的;这不是您进行页面更新的方式。要实现这一点,您将需要来自客户端的 ajax 或 web-sockets 之类的东西。

标签: c# timer non-static


【解决方案1】:

我正在尝试提醒,所以我会在检测到的时间弹出一些消息

您无法通过简单地将额外数据写入已完成的响应上下文来做到这一点。 http 生命周期不允许这样做,至少在 http 1.* 中不允许。相反,您需要(其中之一):

  • 将所有计时器代码移至客户端并在javascript中担心
  • 从客户端运行 ajax 并定期轮询服务器
  • 建立从客户端到服务器的 web-socket 连接;这允许服务器在不需要请求的情况下将消息推送到客户端,但需要在客户端和服务器之间建立并活跃的 TCP 连接,并且需要为 web-socket 服务器提供不同的编程模型

您最好的提醒可能只是第一个。

【讨论】:

  • 由于 OP 在 IIS 上运行,我建议使用 Signalr Web 套接字实现
猜你喜欢
  • 1970-01-01
  • 2013-03-20
  • 2012-08-31
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多