Moskus Skrevet 4. november 2011 Del Skrevet 4. november 2011 (endret) Jeg skal lese noe enkel data fra en fil på nettet inn på telefonen. Vanligvis ville jeg gjort dette med HttpWebRequest og .GetResponse, men den metoden finnes ikke lenger (iallfall ikke for WP7). Det jeg har til nå (som garantert kunne vært gjort på en annen måte er: Public Sub LoadData() BeginReadData(urlBase & "WPseer.aspx") 'AddData() 'System.Diagnostics.Debug.WriteLine(Me.Items.Count) End Sub #Region " Fetching Data " Private _data_from_server As String = String.Empty Private Sub AddData() Dim lines() As String = _data_from_server.Split(Constants.vbNewLine) For Each s As String In lines Dim i As New Item_Location() With {.Location = s} If s <> "Locations:" Then Me.Items.Add(i) Next Me.IsDataLoaded = True End Sub Private Sub BeginReadData(ByVal api_url As String, Optional ByVal user As String = "", Optional ByVal password As String = "") Dim request As HttpWebRequest = HttpWebRequest.Create(New Uri(api_url)) request.BeginGetResponse(New AsyncCallback(AddressOf ReadCallback), request) End Sub Private Sub ReadCallback(asynchronousResult As IAsyncResult) Dim request As HttpWebRequest = DirectCast(asynchronousResult.AsyncState, HttpWebRequest) Dim response As HttpWebResponse = DirectCast(request.EndGetResponse(asynchronousResult), HttpWebResponse) Using streamReader1 As New IO.StreamReader(response.GetResponseStream()) Dim resultString As String = streamReader1.ReadToEnd() _data_from_server = (resultString) AddData() End Using End Sub #End Region ... men den feiler på Me.Items.Add(i) med en Invalid cross thread access exception. Jeg er ikke veldig flink med multithreading, men jeg har alltid fått det til. Nå er jeg blank. Hva kan jeg gjøre? Endret 4. november 2011 av Moskus Lenke til kommentar
torbjørn marø Skrevet 4. november 2011 Del Skrevet 4. november 2011 Invalid cross thread access exception får du fordi du forsøker å oppdatere UI fra en ikke-UI tråd. Du kan bruke Dispatcher.BeginInvoke for å komme deg på riktig tråd. Du finner endel andre som har hatt problemet om du googler litt på feilmeldingen. Her er et relevant StackOverflow-spørmål. 1 Lenke til kommentar
Moskus Skrevet 4. november 2011 Forfatter Del Skrevet 4. november 2011 Invalid cross thread access exception får du fordi du forsøker å oppdatere UI fra en ikke-UI tråd. Du kan bruke Dispatcher.BeginInvoke for å komme deg på riktig tråd. Du finner endel andre som har hatt problemet om du googler litt på feilmeldingen. Her er et relevant StackOverflow-spørmål. Pokker heller, jeg har søkt i to dager! Men takk! Det fungerer! Tror jeg. Lenke til kommentar
FenrisC0de Skrevet 13. april 2012 Del Skrevet 13. april 2012 Er det bare jeg som alltid bruker BackgroundWorker for å håndtere multithreading? Funker herlig bra og da man kan bruke ProgressChanged og/eller RUnWorkerCompleted-eventene for å oppdatere UI-tråden osv. Lenke til kommentar
The Jackal Skrevet 13. april 2012 Del Skrevet 13. april 2012 Er det bare jeg som alltid bruker BackgroundWorker for å håndtere multithreading? Funker herlig bra og da man kan bruke ProgressChanged og/eller RUnWorkerCompleted-eventene for å oppdatere UI-tråden osv. Det er ikke alltid like lett å forstå at et asynkront kall som i dette tilfellet blir pushet ut av UI tråden når callbacken kalles. Dette er ikke et typisk scenario hvor man bruker BackgroundWorker. Ellers bruker jeg ekstremt skjelden BackgroundWorker selv. Om jeg først bruker en bakgrunnstråd, så styrer jeg den selv. BackgroundWorker er en litt quick & dirty løsning imo. Lenke til kommentar
GeirGrusom Skrevet 13. april 2012 Del Skrevet 13. april 2012 Bruker nesten utelukkende Tasks for tiden... Fortsatt må man være obs på cross-thread, men i utgangspunktet så er dette et designproblem og ikke et funksjonsproblem. Lenke til kommentar
The Jackal Skrevet 13. april 2012 Del Skrevet 13. april 2012 Men tasks funker ikke i WP7 så vidt jeg vet (som trådstarter driver med for øyeblikket) Lenke til kommentar
GeirGrusom Skrevet 14. april 2012 Del Skrevet 14. april 2012 (endret) Task Parallell library ser ut til å være støttet av Silverlight, men kanskje ikke av .NET Compact Framework? Det blir jo en ganske sentral del av C# 5.0 og Visual Basic 2012 så kan være lurt å lære seg. Endret 14. april 2012 av GeirGrusom Lenke til kommentar
sputtnikk11 Skrevet 28. desember 2012 Del Skrevet 28. desember 2012 Prøv å legg denne koden på Load() eventen: CheckForIllegalCrossThreadCalls = False Dette er ikke anbefalt. Men det kan løse enkelte problemer med multi-threading. Programmet vil generere eventuelle feil meldinger. Men programmet vil ikke krasje og avslutte. Lenke til kommentar
Moskus Skrevet 29. desember 2012 Forfatter Del Skrevet 29. desember 2012 Prøv å legg denne koden på Load() eventen: CheckForIllegalCrossThreadCalls = False Dette er ikke anbefalt. Men det kan løse enkelte problemer med multi-threading. Programmet vil generere eventuelle feil meldinger. Men programmet vil ikke krasje og avslutte. Det fungerer i fullblods Windows, ikke på Windows Phone. Lenke til kommentar
GeirGrusom Skrevet 29. desember 2012 Del Skrevet 29. desember 2012 Det fungerer i fullblods Windows, ikke på Windows Phone. Bare sørg for å takle multi-threading på en skikkelig måte, så skal det gå greit. Lenke til kommentar
Moskus Skrevet 29. desember 2012 Forfatter Del Skrevet 29. desember 2012 Bare sørg for å takle multi-threading på en skikkelig måte, så skal det gå greit. Det var det jeg gjorde, i april. 1 Lenke til kommentar
GeirGrusom Skrevet 30. desember 2012 Del Skrevet 30. desember 2012 Det var det jeg gjorde, i april. Fabelaktig! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå