c# - 获取 EventHandler 以在原始线程上调用 Invoke()
问题描述
我System.Threading.Timer
用来异步重复某个任务。当任务准备好时,Start()
应该执行原始线程(被调用的地方)上的一个方法。
public event EventHandler StatusChanged;
public void Start()
{
StatusChanged += new EventHandler(SomethingChangedMethod);
new Timer(Pending, null, 0, 1000);
}
private void Pending(object state)
{
//Do Something
StatusChanged?.Invoke(this, EventArgs.Empty);
}
由于我不在控制或其他东西上,我不能调用Invoke()
or BeginInvoke()
。
解决方案
由于可以从库外部调用 Start(),因此我对此没有真正的控制权。
作为图书馆作者,您不知道该做什么是正确的。就你所知,原来的线程只是Start
在很久以前就开始调用并退出了。您不知道返回“相同”“线程”是正确的行为,所以当然,是的,您将其留给您的消费者。
同样,作为库作者,您不应该修复有关使用什么日志框架、是否以及如何向用户显示错误消息(如果甚至有用户)等方面的选择。
做简单的事情,提出你的事件,让为应用程序选择框架的人做出正确的选择。因为您不应该(不一定会损害您图书馆的潜在消费者)
推荐阅读
- node.js - 在 npm 包级别进行猴子修补?
- javascript - Swiper 滑块 - 带有 slideToClickedSlide 的拇指库无法正常工作
- angular - 导出声明类不兼容覆盖成员错误 Angular
- python - 在 Python 中使用 PMML 模型
- c++ - 为什么两个对象不一样,在将一个分配给另一个之后?
- r - 多重回归线解释
- c# - c#我如何以编程方式隐藏水晶“SubReport”?
- java - 如何从同一方法中查看对象的不同参数?
- r - 在基组之间切换时是否可以在多个图例之间切换?
- webpack - Webpack haml-jsx 加载器问题