Я использую awesomium для автоматизации сайта. Я пытался использовать асинхронное программирование, потому что я не хотел, чтобы мой графический интерфейс зависал, но у меня проблема в событии (появляется всплывающее окно, и я хочу сделать некоторые действия в этом всплывающем окне, пока не закрою его) Продолжайте, как я хочу. После того, как событие запущено, я хочу, чтобы мое приложение продолжило метод события (webc_ShowCreatedWebView и после него с помощью popupTwitter (method)), но я обнаружил, что при выполнении кода JavaScript элемент управления возвращается в методе While из первого метода. после того, как метод earnpoints называется и события обжигают, чтобы закончить событие и метод, после чего возвращает управление в то время.Асинхронные методы и событие
private async void button4_Click(object sender, EventArgs e)
{
Twitter twitter = new Twitter(webView);
twitter.Login(webView);
webView.ShowCreatedWebView += webc_ShowCreatedWebView;
addmefast.Login(webView);
int i = 0;
while (i < 10)
{
Task earnpoints = EarnPoints(webView);
await earnpoints;
//Here i don't want to continue until EarnPoints method > webc_ShowCreatedWebView event > popupTwitter method it's finished.
i++;
}
}
public async Task EarnPoints(IWebView web)
{
web.Source = "http://addmefast.com/free_points/twitter".ToUri();
await Task.Delay(3000);
web.ExecuteJavascript("document.getElementsByClassName('single_like_button btn3-wrap')[0].click();"); //event fired: webc_ShowCreatedWebView
}
async void webc_ShowCreatedWebView(object sender, ShowCreatedWebViewEventArgs e)
{
WebView view = new WebView(e.NewViewInstance);
await popupTwitter(view);
}
async Task popupTwitter(WebView view)
{
Popupform FormTwitter = new Popupform(view);
FormTwitter.Show();
await Task.Delay(6000);
FormTwitter.Twitter();
await Task.Delay(2000);
FormTwitter.Close();
await Task.Delay(4000);
}
Звучит как awesomium не понимает асинхронных событий. Если это так, на самом деле вы ничего не можете сделать, кроме как попросить их поддержать async. –
Мне кажется, что webc_ShowCreatedWebView будет запущен только после возвращения EarnPoints. Может быть, вы можете использовать EventWaitHandle и устанавливать его только в методе popupTwitter. Цикл while будет блокироваться до тех пор, пока не будет установлен EventWaitHandle. Документы MSDN: [link] (https://msdn.microsoft.com/en-us/library/system.threading.eventwaithandle%28v=vs.110%29.aspx) – Francois