Witam.
Mam problem, piszę program w visual studio 2012 w c# i potrzebuje zrobić coś takiego:
{
while(warunek);
}
ale tak aby nie zatrzymywać działania eventów i gui;
Z góry dziękuje za pomoc!
Witam.
Mam problem, piszę program w visual studio 2012 w c# i potrzebuje zrobić coś takiego:
{
while(warunek);
}
ale tak aby nie zatrzymywać działania eventów i gui;
Z góry dziękuje za pomoc!
https://msdn.microsoft.com/pl-pl/library/programowanie-asynchroniczne-w-net-4-5.aspx
Async/Await to to czego ci (prawdopodobnie) potrzeba.
async void /*void tylko jeśli metoda jest handlerem do OnClicka itp, w innych metodach zawsze powinno być Task lub Task<T>*/ SomeMethod(object o, EventArgs ea)
{
while (warunek)
{
await Dispatcher.Yield(); // Ta instrukcja "robi responsywność"
}
}
Program nie chce się kompilować
Błąd:
Error 1 The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'. C:\Users\KristoferPlay\Desktop\project\Form1.cs 62 17 project
próbowałem też dodać async do Form1_Load ale program miał problemy z poprawnym wyświetlaniem,
Ogólnie chodzi mi o to aby program czekał w Form1_Load aż nacisnę button1 np tak:
private void Form2_Load(object sender, EventArgs e)
{
//jakieś instrukcje
while(!czy naciśnięto button1);
//jakieś inne instrukcje
while(!czy naciśnięto button1);
//inne instrukcje
}
Dziękuje za pomoc, udało mi się rozwiązać mój problem:
async Task czekaj()
{
while (czydal) await System.Threading.Tasks.Task.Yield();
czyclick = true;
}
private void button1_Click(object sender, EventArgs e)
{
czyclick = false;
}
private void Form2_Load(object sender, EventArgs e)
{
//instrukcje
czekaj();
//inne instrukcje
}
Ogólnie chodzi mi o to aby program czekał w Form1_Load aż nacisnę button1 np tak:
private void Form2_Load(object sender, EventArgs e) { //jakieś instrukcje while(!czy naciśnięto button1); //jakieś inne instrukcje while(!czy naciśnięto button1); //inne instrukcje }
Zły pomysł.
private int bt1_count = 0;
private void button1_Click (object sender, EventArgs e)
{
switch (bt1_count)
{
case 0:
//jakieś instrukcje
break;
case 1:
//jakieś inne instrukcje
break;
case 2:
//inne instrukcje
break;
}
bt1_count++;
}
Nigdy
async void
tracisz kontrolę nad tamtym taskiem, exceptiony są zjadane.
async void czekaj()
=>
async Task czekaj()
bo nie jest to handler.
Chciałem tak na początku zrobić ale takich case'ów było by ok. 20-30.
Dziękuję za uwagę. Już poprawiam na Taski.