skapar .net-ramverket egna trådar?

Permalänk
Medlem

skapar .net-ramverket egna trådar?

Sitter och harvar i gammal vb6-kod som är lyft till .net 2.0 och har stött på ett märkligt problem. Det är så att programmet använder sig av en trejdepartskomponent från devexpress, nån sorts meny eller dylikt. Om programmet körs utan någon debugger attachad så skickar den interna felhanteringen upp en custom meddelanderuta när problemet inträffar som meddelar att "ActiveX control cannot be instantiated because the current thread is not in a single-threaded apartment". Om jag istället kör programmet med debuggern så får jag upp en standard-medelanderuta som meddelar att ett fel har inträffat i den interna felhanteraren pga invalid cross-thread operation, Control cannot be accessed from another thread than the thread it was created in. Varför blir det så här? Är det så att .net-ramverket trådar upp en applikation av sig själv, t.ex. för att fortare instanciera klasser och liknande? Varför blir det skillnad när jag kör med och utan debugger och går det att få samma beteende med debuggern som utan?

Visa signatur

"Say unto thine own heart, I am mine own redeemer"
Don't touch me when I'm crazy of that airplane glue

Permalänk
Medlem

Vanligtvis när man har en GUI applikation så brukar man använda sig av en tråd för GUI och en tråd för allt de andra. Så det som händer är att du antagligen försöker komma åt en komponent i GUI't ifrån din andra tråd. I .net 1.0 så var detta helt okej har jag för mig. Om du kan visa den kodsnutten som det smäller på så kan jag nog visa vad du borde göra.

Finns en inställning någonstans som gör att det blir okej att göra sånt precis som i .Net 1.0 om jag inte missminner mig, men det vore bättre att göra rätt ifrån början istället.

Permalänk

Precis som ovan skriver så kan en tråd inte komma åt en kontroll som en annan tråd har startar. Du måste göra en invoke på det objektet. Skulle vara enklare om du visade lite kod...

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

jo, vanligtvis brukar man dela upp saker i trådar för att gui skall fortsätta svara etc. men det är inte riktigt det som är mitt problem. Eftersom det är en app som är nästan 15 år gammal är det ett hav av kod och inte speciellt mycket av det är trådat och det är där i problemet ligger. Jag har inte lyckats hitta nåt ställe där det skapas en bakgrundstråd vilket har fått mig att fundera på om .net-ramverket kanske skapar ett gäng egna trådar för att snabbare instansiera kontroller eller dyl. Det är möjligt att det skapas en bakgrundstråd nånstans som jag missat men den får ha varit väl gömd.

Jag har googlat lite och det enda jag hittat som va i närheten är Oh why is the: current thread is not in a single-threaded apartment - ASP.NET Forums. Han får samma felmeddelande som jag och jag funderar på om det kan ha nåt med PIA att göra men det känns rätt avlägset då den komponenten jag använder uppdaterades senast 2007.

edit: jag har kollat så att current thread är i Single Thread Appartment state.

Visa signatur

"Say unto thine own heart, I am mine own redeemer"
Don't touch me when I'm crazy of that airplane glue

Permalänk

Alltså, .net skapar inte trådar hur som helst. Det skapar trådar för lite olika saker som events etc.

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Nu har jag lyckats lura ut att applikationen trots allt skapar en bakgrundstråd nånstans (med hjälp av trace points) och att det är därför det smäller, men det är fortfarande ett mysterium varför jag får annat beteende när jag har debuggern igång.

Visa signatur

"Say unto thine own heart, I am mine own redeemer"
Don't touch me when I'm crazy of that airplane glue

Permalänk

Kör du debug/release samma på båda?

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase