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


C# kod fråga

Postades av 2008-04-29 16:19:56 - Robert Bolocci, i forum c# (c-sharp), Tråden har 6 Kommentarer och lästs av 2103 personer

hej alla,

vad betyder följande kod? anropar man en metod inne i själva methoden igen? rekursiv? eller ?


public void UpdateChatForm(string username, string msg, string uri)
{
if (InvokeRequired) //strunta i if-statsen
{
this.BeginInvoke(new UpdateChatFormDelegate(UpdateChatForm),
username, msg, uri);
return;
}
}

Tack


Svara

Sv: C# kod fråga

Postades av 2008-04-29 16:30:27 - Martin Adrian

Om funktionen anropas från fel tråd så anropar den sig själv i rätt tråd.
(en sidoeffekt är att funktionen blir asynkron)

GUI-kontroller måste uppdateras från den tråd de skapades i.

Kontrollerna finns i en särskild SecurityContext som gör att BeginInvoke byter till kontrollens tråd (normalt använder BeginInvoke threadpool)


Svara

Sv: C# kod fråga

Postades av 2008-04-29 16:34:48 - Ruben Jönsson

InvokeRequired och BeginInvoke används i Windows Forms för att avgöra ifall en funktion har blivit anropad ifrån GUI tråden eller någon annan tråd. Det är ju så att man inte får röra några Windows Forms objekt (kontroller) om man inte är i GUI tråden. BeginInvoke gör då så att funktionen läggs i formens meddelande kö och kommer då att köras i GUI tråden där man kan göra vad man vill med sina kontroller och GUI-objekt.

Vissa timers, serieportar, asynkron IO och file notofiers är exempel på funktioner som kan starta events som inte körs i GUI tråden.

/Ruben
www.rjjournal.net



Svara

Sv:C# kod fråga

Postades av 2008-05-02 11:53:59 - Robert Bolocci

Tack så väldigt mycket för ert svar.

jag har inte jobbat med Windows forms mycket och förstår inte riktigt vad ni menar med "en funktion har blivit anropad ifrån GUI tråden eller någon annan tråd"

menar ni att själva application är GUI tråden och om jag själv gjort en tråd som körs parallellt och anropat metoden??

tack


Svara

Sv: C# kod fråga

Postades av 2008-05-02 12:59:36 - Per Hultqvist

Det är precis det de menar...InvokeRequired returnerar True om det inte är GUI-tråden som kör, då krävs alltså att man med Invoke anropar samma funktionen igen, men denna gång bli det via GUI-tråden, och då returnerar InvokeRequired false och funktionen kör den kod som man egentligen ville utföra.

Jag är dock van vid att den brukar se ut ungefär så här (men det finns väl olika metoder, syftet är dock detsamma):

public void UpdateChatForm(string username, string msg, string uri)
{
if (InvokeRequired)
{
this.Invoke(new UpdateChatFormDelegate(UpdateChatForm),
username, msg, uri);
return;
}
else
{
// Får inte anropa en listview från andra trådar än GUI-tråden

// Här gör du något användbart med parametrarna username,msg och uri.
listView1.Items.Add(username + " skrev : " + msg);
}
}


Svara

Sv:C# kod fråga

Postades av 2008-05-02 13:38:25 - Robert Bolocci

Tack så mycket,

vad som jag inte kan föreställa är att hur en method kan anropas utanför GUI-tråden. Om detta är en Windows application, så alltid methoden anropas från GUI-tråden, eller?
en annan senario är att kanske man har reference till det från annan application.

jag vet inte jag måste läsa lite om trådar och processer.

tack


Svara

Sv: C# kod fråga

Postades av 2008-05-02 15:39:25 - Ruben Jönsson

Förutom exemplen jag skrev om ovan så glömde jag det kanske vanligaste och det är om du startar en bakgrundstråd (worker thread) som ska göra något och samtidigt uppdatera kontroller (en förloppsindikator tex) i GUI tråden. Bakgrundstråden jobbar ju då inte i GUI tråden och kan inte direkt pilla på komponenter och kontroller i GUI tråden i en form.

Innan dot net så löste man det här med PostMessage i den anropande funktionen (bakgrundstråden), nu använder man BeginInvoke i den anropade funktionen istället. Resultatet blir detsamma - ett meddelande läggs i GUI trådens meddelande kö och funktionen kopplad till det meddelandet kommer då att vara i GUI tråden när den körs (när meddelandet hanteras av kö hanteraren). Man kan säga att det är en slags synkronisering av anrop till funktioner i GUI tråden.

/Ruben
www.rjjournal.net



Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

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 570 707
27 958
271 751
821
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