C# 应用程序中的等待事件
当我在C#项目中获取数据时,我想等待事件 当程序读取一些数据GetData时,另一个程序在读取此数据的末尾创建一个事件(调用EventForGetData)。 所以,我需要等待EventForGetData完成读取 我为这项任务写了这段代码,但我相信这段代码可能会写得更好C# 应用程序中的等待事件,c#,events,C#,Events,当我在C#项目中获取数据时,我想等待事件 当程序读取一些数据GetData时,另一个程序在读取此数据的末尾创建一个事件(调用EventForGetData)。 所以,我需要等待EventForGetData完成读取 我为这项任务写了这段代码,但我相信这段代码可能会写得更好 public static bool WaitEvent = true; public void EventForGetData(string variable) {
public static bool WaitEvent = true;
public void EventForGetData(string variable)
{
WaitEvent = false;
}
public static string ForWaitGetData()
{
WaitEvent = true;
while (WaitEvent)
{
System.Threading.Thread.Sleep(5);
Application.DoEvents();
}
return Variable;
}
public object GetData(){
// start read data
...
// Wait for finish to read data
ForWaitGetData();
// finish read data
...
return MyObject;
}
尝试使用任务第一个任务是获取数据,最后进行处理或启动事件: 示例
Task task = Task.Factory.StartNew(() =>
{
//put you code here the first one
}).ContinueWith((rs) =>{
//Launch your event or anything you want
});
注意:您将放入continue中的代码将在您在StartNew中编写的代码之后执行 对不起,我不知道怎么写我的例子。。。Task Task=Task.Factory.StartNew(()=>{webBrowser.Document.InvokeScript(“”;//将您的代码放在第一个})继续((rs)=>{ScriptInterface.ForWaitGetData();//启动您的事件或任何您想要的});如果我完全理解你的代码,为什么你不这样组织你的代码,只要你不使用变量,因为不返回赋值变量是没有意义的。主要问题是GetData()和EventForGetData()是同一个线程。因为当我使用GetData()时,一个COM对象会生成EventForGetData()。因此,当GetData等待事件时,如果我在GetData()中等待时不使用Application.DoEvent(),COM永远不会调用函数EventForGetData()。当我试图获取该值时,代码的一般意义是,但在COM对象本身未给出必须获取的值之前,我无法获取该值。也就是说,这个问题的解决方案必须等待机制的实施。谢谢您的回答。但它不起作用。如果在任务扇区中插入ForWaitGetData(),调用函数GetData()将冻结。