C# 应用程序中的等待事件

C# 应用程序中的等待事件,c#,events,C#,Events,当我在C#项目中获取数据时,我想等待事件 当程序读取一些数据GetData时,另一个程序在读取此数据的末尾创建一个事件(调用EventForGetData)。 所以,我需要等待EventForGetData完成读取 我为这项任务写了这段代码,但我相信这段代码可能会写得更好 public static bool WaitEvent = true; public void EventForGetData(string variable) {

当我在C#项目中获取数据时,我想等待事件

当程序读取一些数据GetData时,另一个程序在读取此数据的末尾创建一个事件(调用EventForGetData)。 所以,我需要等待EventForGetData完成读取

我为这项任务写了这段代码,但我相信这段代码可能会写得更好

        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()将冻结。