Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


databindning och trådar

Postades av 2004-02-24 11:39:27 - Peter Bladh, i forum c# (c-sharp), Tråden har 3 Kommentarer och lästs av 791 personer

Hej!

Om man uppdaterar UI't från en annan tråd än den tråd som skapade UI't så kan det uppstå rätt så konstiga fenomen. För att

lösa detta kan man kolla MyControl.InvokeRequired och i så fall köra MyControl.Invoke...

Vid databindning så måste man tydligen oxå göra det. Jag labbade med att manuellt uppdatera en Datatable som en DataGrid

var bunden till och programmet hängde sig. Men om jag körde Invoke innan jag uppdaterade datakällan så fungerade det fint.
Visst, det funkar precis som om man skulle skrivit direkt till kontrollen. Men vad händer om man inte har tillgång till

UI't när man uppdaterar DataTablen? Detta kanske görs i en dll långt bort som inte har en aning om hur datat visas. Hur

löser man det??


Tack på förhand
Peter Bladh


Svara

Sv: databindning och trådar

Postades av 2004-02-25 09:48:24 - Daniel Petersson

Som du vet och har märkt så kan man få ganska märkliga resultat om
man uppdaterar UIet från en annan kontroll än den som ursprungligen
skapade fönstret. (Detta eftersom MS bla lagrar lite information i TLS
på den skapande tråden)

Så nu till din fråga, hur undviker man problem med databindning och
trådar? Databindningen utgår från event från din datatabell och eftersom
dessa event kommer att exekveras av den tråd som uppdaterade tabellen
så kommer datagriden att försöka uppdatera sig på fel tråd.
Vad kan man då göra åt det?

Till att börja med måste vi förstå hur bindningen egentligen går till.
DataGrid binder till allt som implementerar IList eller IListSource.
(DataTable implementerar IListSource, eftersom tabellen i sig
aldrig implementerar IList för det gör DataView klassen)

Om vi istället för att binda mot DataTable klassen binder
mot DataView så har vi en möjlig ingång till att förändra
beteendet i vårt trådade specialfall.

Börja med att skapa en ny DataView class genom arv.
Skapa en ny OnListChanged genom override.
Låt denna kontrollera om vi är på rätt tråd annars
växla till den riktiga tråden.

Källkoden nedan är inte helt komplett men den fungerar
och går lätt att bygga vidare.

/// <summary>
/// Special dataview class that invokes the event on the
/// correct thread for this control
/// </summary>
public class ThreadAwareDataView : DataView
{
Control _invokeTarget;

public ThreadAwareDataView( Control controlToInvoke )
{
_invokeTarget = controlToInvoke;
}

public ThreadAwareDataView( Control controlToInvoke, DataTable table )
: base( table )
{
_invokeTarget = controlToInvoke;
}

// more ctors needed to be complete ...

protected override void OnListChanged(System.ComponentModel.ListChangedEventArgs e)
{
if( _invokeTarget != null )
{
// force this call over to the correct thread if needed
if( _invokeTarget.InvokeRequired )
{// wrong thread, force over to correct thread
_invokeTarget.Invoke( new OnListChangedCallback( OnListChanged ), new object[]{ e } );
}
else
{
base.OnListChanged (e);
}
}
else
{
base.OnListChanged( e );
}
}

private delegate void OnListChangedCallback( System.ComponentModel.ListChangedEventArgs e );
}



Svara

Sv: databindning och trådar

Postades av 2004-02-25 11:18:01 - Peter Bladh

Hej och tack för ditt svar!

Jag tycker dock att det är konstigt att man måste lösa det genom att göra datakällan medveten UI't.


/peter


Svara

Sv: databindning och trådar

Postades av 2004-02-25 14:15:29 - Daniel Petersson

du gör inte datakällan på något vis medveten om uiet, du gör din datavy medveten om att den kan bli uppdaterad från flera olika trådar.
Alternativet är att skriva en ny CurrencyManger som hanterar trådproblemet, eller tom en ny DataGrid.

Dock är datavy modellen enklast att implementera.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 156
27 952
271 704
14 187
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies