[C#] Problem z wątkami

0

Powstał problem. Mianowicie po utworzeniu nowego wątka , newThread, w pierwszym "if`ie" nie wywoluje funkcji startTool.... . Gdy uruchamiam pętlę z parametrami odpowiadającymi dalszej części kodu, czyli sytuacja po "else", gdzie nie ma wątków, to funkcja wywołuje się bez problemów? Proszę o rady, bo to ostatni element mojego projektu i chętnie bym go już zamknął ;]

       if (CopcjeTime.Checked)
                {// parametry czasowe , TUTAJ PROBLEM !!!!!!
                    zeg = new TimeSpan(0, 0, Int32.Parse(NopcjeTime.Value.ToString()));
                    Thread newThread = new Thread(new ThreadStart(Work));
                    newThread.Start();
                    if (newThread.Join(zeg + zeg)) 
                    {
                        this.startToolStripMenuItem.PerformClick(); // NIE URUCHAMIA TEJ FUNKCJI!!!!!!!
                                                                    ///odpowiedzialna za kliknięcie buttona z menu -> start) 
                            if (CopcjeNonStop.Checked) // wysylaj az STOP             
                           {
                              (.. tutaj kod, ale nie dotyczy problemu...)
                           }
                    }
        }
        else
       {//bez parametrow czasowych, wysylaj jak najszybciej , TUTAK OKEJ!!!!!!
                 BopcjeSTART.Enabled = false;
                  BopcjeSTOP.Enabled = true;
                  Gopcje.Enabled = false;
                  startToolStripMenuItem.Enabled = true;
                  this.startToolStripMenuItem.PerformClick(); // URUCHAMIA FUNKCJĘ BEZ PROBLEMU!!!!
                    if (CopcjeNonStop.Checked) // wysylaj az STOP             
                  {
                      (.. tutaj kod, ale nie dotyczy problemu...)
                    }
       }
///////////////////////////////
 static void Work()
        {
            Thread.Sleep(zeg);
        }
0

if (CopcjeTime.Checked)
{// parametry czasowe , TUTAJ PROBLEM !!!!!!

zeg = new TimeSpan(0, 0, Int32.Parse(NopcjeTime.Value.ToString()));
Thread newThread = new Thread(new ThreadStart(Work));
newThread.Start();

if (newThread.Join(zeg + zeg) == true)
{

this.startToolStripMenuItem.PerformClick(); // NIE URUCHAMIA TEJ FUNKCJI!!!!!!!
///odpowiedzialna za kliknięcie buttona z menu -> start)
if (CopcjeNonStop.Checked) // wysylaj az STOP             
{
     (.. tutaj kod, ale nie dotyczy problemu...)
}
                

}

}
else
{//bez parametrow czasowych, wysylaj jak najszybciej , TUTAK OKEJ!!!!!!

BopcjeSTART.Enabled = false;
BopcjeSTOP.Enabled = true;
Gopcje.Enabled = false;
startToolStripMenuItem.Enabled = true;
this.startToolStripMenuItem.PerformClick(); // URUCHAMIA FUNKCJĘ BEZ PROBLEMU!!!!

if (CopcjeNonStop.Checked) // wysylaj az STOP
{
(.. tutaj kod, ale nie dotyczy problemu...)
}

}
///////////////////////////////
static void Work()
{

Thread.Sleep(zeg);

}

0

nie no warunek jest spełniony. w if nie trzeba na sztywno pisać TRUE, on "rozumie" jeżeli warunek jest spełniony ;]. W tym nie ma problemu, po prostu (sprawdzone przy pomocy debbugera), program nie wchodzi do tej funkcji, tylko przechodzi przez nią bez żadnej reakcji ( a powinien "wejść" do jej środka i wykonać zapisane tam operacje)

0

W pierwszym bloku nie dałeś "startToolStripMenuItem.Enabled = true;" w przeciwieństwie do drugiego, więc pewnie dlatego PerformClick nic nie zdziała - kontrolka jest nieaktywna.

Poza tym zamiast "Int32.Parse(NopcjeTime.Value.ToString())" daj
"Convert.ToInt32(NopcjeTime.Value)"

0
adf88 napisał(a)

W pierwszym bloku nie dałeś "startToolStripMenuItem.Enabled = true;" w przeciwieństwie do drugiego, więc pewnie dlatego PerformClick nic nie zdziała - kontrolka jest nieaktywna.

Poza tym zamiast "Int32.Parse(NopcjeTime.Value.ToString())" daj
"Convert.ToInt32(NopcjeTime.Value)"

Dzięki, małe niedopatrzenie ;]
Problem rozwiązany.
Pozdro

1 użytkowników online, w tym zalogowanych: 0, gości: 1