Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用EventHandler检测变量更改?_C#_Event Handling - Fatal编程技术网

C# 使用EventHandler检测变量更改?

C# 使用EventHandler检测变量更改?,c#,event-handling,C#,Event Handling,当变量更新为值>0时,您建议我如何设置要触发的事件处理程序 public _price; public double GetPrice(string item) { _table.GetData += new EventHandler<EventArgs>(ExtractData); // Right now I set it to sleep to give it enough time to return the data. // But I woul

当变量更新为值>0时,您建议我如何设置要触发的事件处理程序

public _price;

public double GetPrice(string item)
{
    _table.GetData += new EventHandler<EventArgs>(ExtractData);

    // Right now I set it to sleep to give it enough time to return the data.
    // But I would like to setup an eventhandler to return the _price when a value is populated
    Thread.Sleep(1000);

    return _price;
}

void ExtractData(object sender, DataEventArgs e)
{
    foreach (PriceRecord rec in e)
    {
        if (rec.myprc != null)
            {
                 _price = double.Parse(rec.myprc.Value.ToString());
            }
    }
}
public\u价格;
公共双GetPrice(字符串项)
{
_table.GetData+=新的EventHandler(ExtractData);
//现在我将它设置为睡眠状态,以便给它足够的时间返回数据。
//但是我想设置一个eventhandler,在填充值时返回_价格
睡眠(1000);
退货价格;
}
void ExtractData(对象发送方,DataEventArgs e)
{
foreach(e中的价格记录记录)
{
如果(rec.myprc!=null)
{
_price=double.Parse(rec.myprc.Value.ToString());
}
}
}
如果我删除Sleep,在返回错误值之前,它没有足够的时间获取数据。就我个人所知,我想消除睡眠以提高绩效。如果有比使用事件处理程序更好的选择,我愿意接受建议

感谢您的任何建议或建议, 谢谢。

您的设计

不能用事件阻止方法的执行,因此我认为这不是一个好的解决方案

您是否在多线程中执行它所说的
//这里有一些代码
?如果是这样,请签入(如果您使用的是重量级线程)或(如果您使用的是线程池)以阻止GetPrice的执行,直到设置了一个值

没有你正在做的细节,我不确定是否有更好的解决方案。


非常有用的文章

如何填充该值?如果它来自组件(例如通过文本框),则将事件处理程序放在该组件上,而不是放在值本身上。我不明白为什么在这种情况下需要睡眠。“什么”没有足够的时间获取数据?我更新了代码以显示另一个eventhandler,它访问一个表并提取我需要的价格信息。很抱歉,缺少信息。另外,您正在泄漏资源。每次调用GetPrice时,表中都会添加一个新的事件处理程序;可能有更好(更简单)的方法来实现这一点。