Czekaj aż bez zatrzymywania programu

0

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!

0

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ść"
    }
}
0

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

}

0

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
}
0

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++;
}
1

Nigdy

async void 

tracisz kontrolę nad tamtym taskiem, exceptiony są zjadane.

async void czekaj()

=>

async Task czekaj()

bo nie jest to handler.

0

Chciałem tak na początku zrobić ale takich case'ów było by ok. 20-30.

0

Dziękuję za uwagę. Już poprawiam na Taski.

1 użytkowników online, w tym zalogowanych: 0, gości: 1