Bármilyen megoldást illegális kereszt szál Operation kivétel?

szavazat
15

Ha az adatok kötődnek C #, a menet, amely megváltoztatja az adatok hatására a vezérlő változtatni is. De ha ez a téma nem az, ahol a kontroll jött létre, akkor kap egy illegális kereszt szál művelet kivételével.

Van egyébként, hogy ennek megelőzésére?

A kérdést 05/08/2008 08:45
a forrás felhasználó
Más nyelveken...                            


5 válasz

szavazat
3

Ha az adatok módosítása nem túl időigényes (azaz, ha a fő célja a háttérben téma nem a tényleges adatok módosítása), akkor próbálja ki a szakaszt, amely módosítja az adatokat egy küldöttet és Invoke'ing hogy küldöttet.

Ha a tényleges nehéz munka van az adatok, akkor valószínűleg, hogy hozzon létre egy mély példányát az adatokat átadni a háttérben menet, amely elküldi a feldolgozott adatok vissza a UI szál keresztül Invoke újra.

Csak akkor kell mozgatni a kódot, amely megváltoztatja az adatokat a delegált funkció (mert az adatok a változás mi váltja ki a vezérlő frissítés). Más, mint, hogy nem kell írni semmit extra.

Válaszolt 05/08/2008 09:05
a forrás felhasználó

szavazat
3

Meg kell tudni, hogy tegyen valamit, mint például:

if (control.InvokeRequired)
{
    control.Invoke(delegateWithMyCode);
}
else
{
    delegateWithMyCode();
}

InvokeRequired egy ingatlan Controls, hogy ha a megfelelő szál, majd indítsa el fogja hívni a megbízott a megfelelő szál.

UPDATE: Igazából én utolsó feladat csináltunk ilyesmit:

private void SomeEventHandler(Object someParam)
{
    if (this.InvokeRequired)
    {
        this.Invoke(new SomeEventHandlerDelegate(SomeEventHandler), someParam);
    }

    // Regular handling code
}

amely feleslegessé teszi a más blokk, és egyfajta szigorítja a kódot.

Válaszolt 05/08/2008 08:51
a forrás felhasználó

szavazat
1

Mivel nincs olyan teszt, hogy menjen a nem tudom garantálni, ez a megoldás, de úgy tűnik, hogy a forgatókönyv hasonló a használt folyamat frissítése bár különböző szálak (használjon egy delegált) alkalmas lenne itt.

public delegate void DataBindDelegate();
public DataBindDelegate BindData = new DataBindDelegate(DoDataBind);

public void DoDataBind()
{
    DataBind();
}

Ha az adatok kötelező tennivaló egy adott szál, akkor hagyd, hogy a téma nem a munka!

Válaszolt 05/08/2008 08:56
a forrás felhasználó

szavazat
0

A WPF és Silverlight kötődését infrastruktúra gondoskodik a kapcsolót, hogy az UI szál.

Válaszolt 08/08/2008 17:19
a forrás felhasználó

szavazat
0

Ha a szál hívás „illegális” (azaz a DataBind hívás érinti vezérlőkkel nem jön létre a szál meg van hívjuk), akkor létre kell hozni egy küldött, hogy még ha a határozat / felkészülés a DataBind nem történik a kontroll-létrehozása szál, ebből eredően módosítása őket (azaz DataBind ()) lesz.

Akkor hívja a kódot a szálat így:

this.BindData.Invoke();

Ez aztán okozhat az eredeti szál csinálni a kötődést, amely (feltételezve ez a szál, amely megteremtette az ellenőrzések) működnie kell.

Válaszolt 05/08/2008 09:06
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more