首页 > 解决方案 > 获取 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()

标签: c#multithreadingasynchronousevent-handling

解决方案


由于可以从库外部调用 Start(),因此我对此没有真正的控制权。

作为图书馆作者,您不知道该做什么是正确的。就你所知,原来的线程只是Start在很久以前就开始调用并退出了。您不知道返回“相同”“线程”是正确的行为,所以当然,是的,您将其留给您的消费者。

同样,作为库作者,您不应该修复有关使用什么日志框架、是否以及如何向用户显示错误消息(如果甚至有用户)等方面的选择。

做简单的事情,提出你的事件,让为应用程序选择框架的人做出正确的选择。因为您不应该(不一定会损害您图书馆的潜在消费者)


推荐阅读