Avatar billede kagehuset Nybegynder
16. august 2007 - 11:03 Der er 19 kommentarer og
1 løsning

thread problemer; nonstatic members?

Hejsa

Jeg har et hurtigt begynderspørgsmål ang. oprettelse af tråde... Jeg får fejlen "A field initializer cannot reference the nonstatic field, method, or property thread1()". Koden ser ca. ud som nedenfor:

  public void thread1()
  {
      rename(path, "oldname", "newname" ) 
  }

  Thread t1 = new Thread(new ThreadStart(thread1));
  t1.Start();


pft
Mads
Avatar billede oo Nybegynder
16. august 2007 - 11:13 #1
Mit bud:

Du starter tråden fra din Main metode der er statisk?

Derfor skal metoden din tråd kalder også være statisk.

public static void thread1()
{
      rename(path, "oldname", "newname" );
}
Avatar billede nielle Nybegynder
16. august 2007 - 11:16 #2
Problemet har ikke direkte noget med threading at gøre, men skyldes den måde du forsøger at initialisere:

Sådan:

        public void thread1()
        {
            rename(path, "oldname", "newname");
        }

        Thread t1;

        public void StartThread()
        {
            t1 = new Thread(new ThreadStart(thread1));
            t1.Start();
        }
Avatar billede kagehuset Nybegynder
16. august 2007 - 11:24 #3
Hej - tak for hurtigt svar - jeg har umiddelbart ingen main metode - den ligger i en stort set tom Program.cs jeg ikke selv har oprettet...
Umiddelbart startes tråden i "public partial class mainForm : Form" som er den form jeg har alt i...

Hvis jeg sætter "static" ind får jeg en ny fejl med "An object reference is required for the nonstatic field, method og property..."
Avatar billede oo Nybegynder
16. august 2007 - 11:32 #4
Så har det ikke umiddelbart noget med din tråd håndtering at gøre...

Prøv at skifte linien:

rename(path, "oldname", "newname");

Ud med :

MessageBox.Show("Tråden virker");
Avatar billede oo Nybegynder
16. august 2007 - 11:34 #5
Kig evt. selv mere på http://msdn2.microsoft.com/en-us/library/5724t6za(vs.80).aspx
Avatar billede nielle Nybegynder
16. august 2007 - 11:43 #6
I stedet fot "StartThread" kan du selvfølgelig også placere den stump kode i Main() metiden eller i klassens constructor i stedet.
Avatar billede kagehuset Nybegynder
16. august 2007 - 12:15 #7
OK takker - så kom jeg lidt videre - kan godt passe det ikke er tråden som sådan der er noget i vejen med... Funktionen der skal køres i den har bare virket fint tidligere så tænkte at det måtte være tråden der måtte være noget galt med.
In any case, jeg får nu fejlen "Invalid token '(' in class, struct, or interface member declaration" på t1.start();
Avatar billede nielle Nybegynder
16. august 2007 - 12:17 #8
Sikkert bare en taste fejl et eller andet sted. Prøv at poste hele din kode.
Avatar billede kagehuset Nybegynder
16. august 2007 - 12:40 #9
Jep jeg syntes også det virker lidt mystisk...


public void thread1()
  {
      rename(path, "oldname", "newname" ) 
  }

Thread t1 = new Thread(new ThreadStart(thread1));
t1.Start();
Avatar billede nielle Nybegynder
16. august 2007 - 13:05 #10
Hele din kode :^)
Avatar billede kagehuset Nybegynder
16. august 2007 - 13:52 #11
Nåja, bevares ;-)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ADOX;
using System.Data.OleDb;
using System.IO;
using System.Threading;

namespace TestDb
{
    public partial class mainForm : Form
    {
        public mainForm()
        {
            InitializeComponent();
        }

        public void thread1()
        {
          rename(path, "oldname", "newname" ) 
        }

        Thread t1 = new Thread(new ThreadStart(thread1));
        t1.Start();

...masser af andre klasser...

mvh
Mads
Avatar billede nielle Nybegynder
16. august 2007 - 14:39 #12
Du mangler i hvert fald et ';' her:

rename(path, "oldname", "newname" );
Avatar billede oo Nybegynder
16. august 2007 - 14:40 #13
Du skal nok lige læse lidt op på namespaces, klasser og hvordan du kalder metoder i C#.

Prøv følgende...

namespace TestDb
{
    public partial class mainForm : Form
    {
        Thread t1 = null;

        public mainForm()
        {
            InitializeComponent();

            t1 = new Thread(new ThreadStart(thread1));
            t1.Start();
        }

        public void thread1()
        {
          rename(path, "oldname", "newname" ) 
        }



Jeg går ud fra at rename metoden eksisterer et andet sted i klassen.
Avatar billede kagehuset Nybegynder
16. august 2007 - 16:35 #14
oo -> Jaa - der har du helt ret, men jeg må nok indrømme jeg blev grebet af dovenskaben og brugte jer i stedet... Det virker ihvertfald nu - men nu får jeg masser af "An object reference is required for the nonstatic field, method og property..." fejl - skal alt man kører fra tråde være static?
Avatar billede kagehuset Nybegynder
16. august 2007 - 16:36 #15
hov, min fejl -
Avatar billede nielle Nybegynder
16. august 2007 - 16:46 #16
Hmmm, var det ikke den løsning jeg angav i 16/08-2007 11:16:11?
Avatar billede kagehuset Nybegynder
16. august 2007 - 16:50 #17
Joo - det kan du have ret i, men som du kan se kom jeg næsten også til at give mig selv point for et svar... Hvis det ikke er for meget besvær kan jeg oprette et rpørgsmål mere der drejer sig om den "An object reference is required for the nonstatic field, method og property..." fejl jeg får nu så du kan få point der?

Jeg går ud fra det er en ret triviel fejl og jeg bare skal instantiere et object eller to inden tråden startes?

mvh
Mads
Avatar billede nielle Nybegynder
16. august 2007 - 16:55 #18
Det behøves ikke. Jeg undrede mig bare. :^)
Avatar billede kagehuset Nybegynder
16. august 2007 - 21:42 #19
OK - jeg har givet dig lidt karma i stedet ;-)
Avatar billede vivian22 Nybegynder
22. juli 2012 - 02:56 #20
SPAM fjernet

Dette indlæg er blevet modereret af en CoAdmin

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester