C# 等待方法返回true
我有两个方法A和B。A从内部调用B方法。方法返回true或false,无论文件是否包含内容。代码如下: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
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()返回的值变为真后使用它,因此他可能需要在检查它变为真后再次调用它