我是一个完全的初学者async/await,所以任何帮助将是伟大的。
async Task<bool> IsIPBannedAsync(string ip)
{
try
{
bool isBanned = false;
await foreach (var line in File.ReadLinesAsync(BannedIPFile))
{
if(line.Contains(ip.Trim())) { isBanned = true; break; }
}
return isBanned;
}
catch { return false; }
}
我从一个按钮调用它,将结果发送给一个标签:
private void btnCheck_Click(object sender, EventArgs e)
{
lblResult.Text = string.Empty;
lblResult.Text = IsIPBannedAsync(txtIP.Text);
}
当然,我曾尝试使用Convert.ToBoolean()
|Convert.ToString()
发送结果,但没有成功,并获得System.Threading
字符串,而不是布尔值true | false。
没有async,我可以让事情工作:
bool isBanned = false;
isBanned = File.ReadLines(BannedIPFile).Contains(ip.Trim());
return isBanned;
谁能告诉我我做错了什么,拜托?Appreciate it - thank you
更新:
那些找不到我发布的内容的人,可以在这里看到。我使用的是net core 7.0,它是在该版本中引入的。
在Button Click事件中,它不喜欢返回布尔值,并要求将其转换为字符串。并非所有微软解决方案都有效。
如果我将Task<bool>
更改为Task<string>
,然后在任何地方使用返回IsBanned.ToString();
。
@ProgrammingLlama,我从第3版开始使用VB,参加了微软的大部分。net发布,但从2010年左右开始,我就根本没有真正为编码而烦恼,但我仍然每年为MSDN企业订阅付费,作为一个人。
我的VS版本:
Microsoft Visual Studio Enterprise 2022(64位)-当前版本17.5.4
我对VS2022开发者社区的一些问题在这个网站和MSDN网站上被引用了很多次。
ReadAllLinesAsync
注释是正确的,因为如果答案在第1行,为什么要一直读一个文件?
Liam,这是c#, Net Core 7桌面应用程序,它将被放入DLL并在我朋友的net core 7.0 razor上使用的网站。我几乎每天都会用到这个
感谢大家的发帖,我还需要解决这个问题。
大家好,感谢大家的建议。我发现它和点击事件一样简单。
简而言之:
private async void btnCheck_Click(object sender, EventArgs e)
{
bool IsBanned = await IsIPBannedAsync(txtIP.Text);
lblResult.Text = IsBanned.ToString();
}
public async Task<bool> IsIPBannedAsync(string ip)
{
try
{
bool IsBanned = false;
await foreach (var line in File.ReadLinesAsync(IPFileList))
{
if (line.Contains(ip.Trim())) { IsBanned = true; break; }
}
return IsBanned;
}
catch { return false; } // This was done for ease here.
}
,是的,它会编译。