我有一个第三方库,其中包含一个异步执行函数的类.该类继承自Form.该功能基本上基于存储在数据库中的数据执行计算.完成后,它会在调用表单中调用_Complete事件.
我想要做的是同步调用该函数,但是从非Windows窗体应用程序.问题是,无论我做什么,我的应用程序块和_Complete事件处理程序永远不会触发.从Windows窗体我可以通过使用"完整"标志和"while(!complete)application.doevents"来模拟同步运行的函数,但显然application.doevents在非Windows窗体应用程序中不可用.
有什么东西阻止我在Windows窗体应用程序之外使用类的方法(由于它继承自'Form')?有什么方法可以解决这个问题吗?
谢谢,迈克
在尝试时,可能值得尝试类似下面的内容,使用WaitHandle来阻止当前线程而不是旋转并检查标志.
using System; using System.Threading; class Program { AutoResetEvent _autoEvent; static void Main() { Program p = new Program(); p.RunWidget(); } public Program() { _autoEvent = new AutoResetEvent(false); } public void RunWidget() { ThirdParty widget = new ThirdParty(); widget.Completed += new EventHandler(this.Widget_Completed); widget.DoWork(); // Waits for signal that work is done _autoEvent.WaitOne(); } // Assumes that some kind of args are passed by the event public void Widget_Completed(object sender, EventArgs e) { _autoEvent.Set(); } }