Я пытаюсь получить форму, чтобы подождать, пока какая-то часть моего метода _Load
будет закончена, прежде чем продолжить. У меня есть несколько методов, которые являются асинхронными, но я не могу понять, почему я не могу заставить код ждать, пока fakeClickCheckUpdate
будет закончен, прежде чем продолжить. Вот основные методы:
public myForm(string args)
{
InitializeComponent();
Load += myForm_Load;
}
private void myForm_Load(object s, EventArgs e)
{
this.fakeClickCheckUpdate();
loadFinished = true;
if (this.needsUpdate == true)
{
Console.WriteLine("Needs update...");
}
else
{
Console.WriteLine("update is false");
}
}
public void fakeClickCheckUpdate()
{
this.checkUpdateButton.PerformClick();
}
private async void checkUpdateButton_Click(object sender, EventArgs e)
{
await startDownload(versionLink, versionSaveTo);
await checkVersion();
Console.WriteLine(needsUpdate);
}
private async Task checkVersion()
{
string currVersion;
string newVersion;
using (StreamReader sr = new StreamReader(currVersionTxt))
{
currVersion = sr.ReadToEnd();
}
using (StreamReader nr = new StreamReader(versionSaveTo))
{
newVersion = nr.ReadToEnd();
}
if (!newVersion.Equals(currVersion, StringComparison.InvariantCultureIgnoreCase))
{
this.BeginInvoke((MethodInvoker)delegate
{
progressLabel.Text = "New version available! Please select 'Force Download'";
});
this.needsUpdate = true;
}
else
{
this.BeginInvoke((MethodInvoker)delegate
{
progressLabel.Text = "Your version is up-to-date. No need to update.";
});
this.needsUpdate = false;
}
}
В принципе, я хочу, чтобы проверить текущую версию с помощью checkVersion
и завершить ее, прежде чем она попытается продолжить использование loadFinished = true
внутри myForm_Load
. У меня есть checkVersion
установить в качестве задачи асинхронном, так что нажатие кнопки можно использовать await
на него. Есть ли способ получить необходимую мне функциональность с помощью этого кода?
Во-первых, переместите код из своего действия с кликом.
private async void checkUpdateButton_Click(object sender, EventArgs e)
{
await CheckForUpdate();
}
private async Task CheckForUpdate()
{
await startDownload(versionLink, versionSaveTo);
await checkVersion();
Console.WriteLine(needsUpdate);
}
Затем вы можете вызвать эту функцию в своем OnLoad.
private async void myForm_Load(object s, EventArgs e)
{
await CheckForUpdate();
loadFinished = true;
if (this.needsUpdate == true)
{
Console.WriteLine("Needs update...");
}
else
{
Console.WriteLine("update is false");
}
}
PerformClick
?await
потому что что-тоasync Task
, но почему этоasync Task
а не простоvoid
?