C# 等待方法返回true

C# 等待方法返回true,c#,asp.net,.net,c#-4.0,C#,Asp.net,.net,C# 4.0,我有两个方法A和B。A从内部调用B方法。方法返回true或false,无论文件是否包含内容。代码如下: public static void A() { var isValid = B(); // Wait until "isValid" comes true var xx = "test"; } public static bool B() { // This will check for

我有两个方法A和B。A从内部调用B方法。方法返回true或false,无论文件是否包含内容。代码如下:

    public static void A()
    {
        var isValid = B();
        // Wait until "isValid" comes true
        var xx = "test";
    }

    public static bool B()
    {
        // This will check for a file content
        // Say C://test.txt
        // If the file has some content this method will return true else false
    }
我希望A方法等待,并且不执行“var xx=“test”;”行,除非B方法返回true。你能帮我指点一下怎么做吗

编辑:我不能简单地使用if循环,即if(isValid),因为要检查内容的文件是由其他线程编写的,所以我需要从A中不断检查B方法。除非B返回true,否则我不能让这段代码“var xx=“test”;”执行,如果返回false,代码应该在那里等待(at var isValid=B();)除非B返回true,即代码应连续检查B状态。

尝试以下操作:

if(B())
    var xx = "test";

您应该使用while循环

while (!B ()) { }
var x = "test";
这将执行B直到它返回true。更好的方法可能是实现一个事件,该事件将在条件变为true时触发

考虑到您正在使用文件,您可以查看FileSystemWatcher,它可以在文件更改时触发一个方法。

试试这个

public static void A()
    {
       while(!B())
        {
       var isValid = B(); //whatever the code 
        }
     var xx = "test";
    }

FileSystemWatcher
对象与
Changed
事件处理程序一起使用,该事件处理程序指向一个方法,该方法将在文件内容更改时执行(并且在更改后具有内容)


参见示例。

如果您在同一个线程上执行这两个方法,它将等待到B()完成。是否使用多线程?作为不相关的注释,您的
B
方法是否确认所有数据都在文件中,而不仅仅是部分数据?根据文件的生成方式,您可能需要确保在文件仍在编写时,您没有将文件注册为包含内容。特别是+1用于建议事件作为更好的选择。另外,如果您需要注释来指出空语句,您最好使用
{}
。为什么调用
B()
在循环内?调用executed@MoatazAmer:关键是在while循环的每次迭代中调用B,因为它是循环条件,所以不需要在循环中再次调用它,除非在
isValid
上循环,而不是直接在
B()上循环
。对于某些人来说,这可能具有更好的可读性,但目前您正在循环体中执行一个无意义的方法调用。hmmm他似乎希望在B()返回的值变为真后使用它,因此他可能需要在检查它变为真后再次调用它