[C#] Metody asynchroniczne zwracające obiekty

0

Problem jest taki:

Posiadam klasę, której pewna metoda uruchamia inne metody tej klasy.
szkielet:

class myClass
{

metoda1,
metoda2,
metoda3,

metoda4 (uruchamia metody 1,2,3)

ListBox do wyswietlania danych zawartych w liscie, poprzez właściwośc datasource
List<T>

Metody:1,2,3 zawierają czynnosci, które będą trwały ok 40 sekund kazda a po skończeniu każdej informacje w List<t> są odpowiendio updateowane.
Chcę, aby moja metoda uruchamiała metody 1,2,3 w sposob asynchroniczny, lecz nie wiem jak mogę update'ować listę, aby zmiany na ListBox były zauważalne.

Czytałem o delegacjach, które zwracają obiekty (z głownego wątku updateował bym listę korzystając ze zwroconych obiektów), ale niestety nie widzę możliwości uruchamiania ich asynchronicznie, aby zwracały obiekty.

Każda wskazówka będzie pomocna.

}

Próbowałem tu:
http://msdn.microsoft.com/en-us/library/bb549151.aspx

0

http://www.csharp-examples.net/create-asynchronous-method/

Wynik możesz sobie wrzucić do AsyncCompletedEventArgs, z tego co pamiętam.

Ewentualnie, jeżeli chcesz, by zmiany w ListBox były zauważalne w trakcie wykonywania wątków, możesz je po prostu do twojego obiektu wrzucić, pamiętając tylko o właściwej synchronizacji (lock na przykład).

0
asynchros napisał(a)

Problem jest taki:

Posiadam klasę, której pewna metoda uruchamia inne metody tej klasy.
szkielet:

class myClass
{

metoda1,
metoda2,
metoda3,

metoda4 (uruchamia metody 1,2,3)

ListBox do wyswietlania danych zawartych w liscie, poprzez właściwośc datasource
List<T>

Metody:1,2,3 zawierają czynnosci, które będą trwały ok 40 sekund kazda a po skończeniu każdej informacje w List<t> są odpowiendio updateowane.
Chcę, aby moja metoda uruchamiała metody 1,2,3 w sposob asynchroniczny, lecz nie wiem jak mogę update'ować listę, aby zmiany na ListBox były zauważalne.

Czytałem o delegacjach, które zwracają obiekty (z głownego wątku updateował bym listę korzystając ze zwroconych obiektów), ale niestety nie widzę możliwości uruchamiania ich asynchronicznie, aby zwracały obiekty.

Każda wskazówka będzie pomocna.

}

W skrócie to zrób event danego delegata.
np

public delegate String MyDelegate();
public event MyDelegate theDelegate;
//i potem np w danym wątku 
foreach(MyDelegate del in theDelegate.GetInvocationList())
{
del.BeginInvoke(new AsyncCallback(Result), del);
}

//oraaz funkcja zbierająca wyniki
private void Result(IAsyncResult iar)
{
MyDelegate el = (MyDelegate) iar.AsyncState;
String result = del.EndInvoke(iar); //jeśli dana funkcja ma zwracać String
}

Sorry, jeśli jakieś błędy. Z głowy piszę.

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