Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Számos gyakran végrehajtott művelet végrehajtása hosszú időt vehet igénybe. Például:
Képletöltések
Webszolgáltatás-meghívások
Fájlletöltések és feltöltések (beleértve a társközi alkalmazásokat is)
Összetett helyi számítások
Adatbázis-tranzakciók
Helyi lemezhozzáférés, mivel lassú a memóriahozzáféréshez képest
Az ilyen műveletek futás közben blokkolhatják a felhasználói felületet. Ha rugalmas felhasználói felületet szeretne, és az ilyen műveletekhez kapcsolódó hosszú késésekkel szembesül, a BackgroundWorker összetevő kényelmes megoldást kínál.
A BackgroundWorker összetevő lehetővé teszi az időigényes műveletek aszinkron (a háttérben) végrehajtását az alkalmazás fő felhasználói felületi szálától eltérő szálon. A BackgroundWorkerhasználatához egyszerűen meg kell adnia, hogy milyen időigényes munkavégző metódust kell végrehajtania a háttérben, majd meghívja a RunWorkerAsync metódust. A hívószál továbbra is a szokásos módon fut, miközben a feldolgozó metódus aszinkron módon fut. Ha a metódus befejeződött, a BackgroundWorker riasztást küld a hívó szálról a RunWorkerCompleted esemény aktiválásával, amely opcionálisan tartalmazza a művelet eredményeit.
A BackgroundWorker összetevő az EszközkészletÖsszetevők lapján érhető el. Ha BackgroundWorker szeretne hozzáadni az űrlaphoz, húzza a BackgroundWorker összetevőt az űrlapra. Az összetevő tálcán jelenik meg, tulajdonságai pedig a Tulajdonságok ablakban jelennek meg.
Az aszinkron művelet elindításához használja a RunWorkerAsync metódust.
RunWorkerAsync egy választható object paramétert használ, amellyel argumentumokat adhat át a feldolgozó metódusnak. A BackgroundWorker osztály elérhetővé teszi az DoWork eseményt, amelyhez a feldolgozószál egy DoWork eseménykezelőn keresztül csatlakozik.
Az DoWork eseménykezelő egy DoWorkEventArgs paramétert vesz fel, amely Argument tulajdonságú. Ez a tulajdonság megkapja a paramétert a RunWorkerAsync-tól, és át lehet adni az Ön dolgozó metódusának, amelyet az eseménykezelő az DoWork-ben fog meghívni. Az alábbi példa bemutatja, hogyan rendelhet eredményhez egy ComputeFibonaccinevű feldolgozói metódust. Ez egy átfogóbb példa része, amelyet megtalálhat a Útmutató: Háttérműveletet használó űrlap implementálása-nél.
// This event handler is where the actual,
// potentially time-consuming work is done.
void backgroundWorker1_DoWork( Object^ sender, DoWorkEventArgs^ e )
{
// Get the BackgroundWorker that raised this event.
BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender);
// Assign the result of the computation
// to the Result property of the DoWorkEventArgs
// object. This is will be available to the
// RunWorkerCompleted eventhandler.
e->Result = ComputeFibonacci( safe_cast<Int32>(e->Argument), worker, e );
}
// This event handler is where the actual,
// potentially time-consuming work is done.
private void backgroundWorker1_DoWork(object sender,
DoWorkEventArgs e)
{
// Get the BackgroundWorker that raised this event.
BackgroundWorker worker = sender as BackgroundWorker;
// Assign the result of the computation
// to the Result property of the DoWorkEventArgs
// object. This is will be available to the
// RunWorkerCompleted eventhandler.
e.Result = ComputeFibonacci((int)e.Argument, worker, e);
}
' This event handler is where the actual work is done.
Private Sub backgroundWorker1_DoWork( _
ByVal sender As Object, _
ByVal e As DoWorkEventArgs) _
Handles backgroundWorker1.DoWork
' Get the BackgroundWorker object that raised this event.
Dim worker As BackgroundWorker = _
CType(sender, BackgroundWorker)
' Assign the result of the computation
' to the Result property of the DoWorkEventArgs
' object. This is will be available to the
' RunWorkerCompleted eventhandler.
e.Result = ComputeFibonacci(e.Argument, worker, e)
End Sub
További információ az eseménykezelők használatáról: Események.
Figyelmeztetés
Bármilyen többszálú használat esetén nagyon komoly és összetett hibáknak teheti ki magát. A többszálas megoldás implementálása előtt tekintse meg a felügyelt szálkezelés ajánlott eljárásait.
További információ a BackgroundWorker osztály használatáról: Művelet futtatása a háttérben.
Lásd még
.NET Desktop feedback