Laden...

Thread Problem Progressbar updated sich nicht.

Erstellt von rollerfreak2 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.109 Views
rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 14 Jahren
Thread Problem Progressbar updated sich nicht.

Hallo zusammen ich habe folgendes Problem. Ich muss eine Datei manipulieren die unter SourceControl (Rational ClearCase) steht. Dazu gibt es eine Library CAL mit Hilfe dieser es relativ einfach ist. Man kann durch die Library das ClearTool wie in der Comandozeile bedienen. Daher ist das ein und auschecken kein Problem.

Jetzt zum eigentlichen Problem.
Während dieses Vorganges schalte ich ein Progressbar auf Style = ProgressBarStyle.Marquee! Danach starte ich eine Thread der das ein und auschecken übernimmt. Kleines Beispiel.


private void StartSavingProgress()
{
    for (int i = 0; i < 100000; i++)
    {
        for (int j = 0; j < 100000; j++)
        {
             //nothing
        }
    }
}

public void Main()
{
    this.m_thread = new Thread(new ThreadStart(this.StartSavingProgress));
    this.m_progressBar.MarqueeAnimationSpeed = 20;
    this.m_progressBar.Style = ProgressBarStyle.Marquee;
    this.m_thread.Start();
}

Dort funkioniert das alles bestens, daher auch wenn ich mich im Thread befinde wird die Progressbar ordentlich animiert.

Nun mein Problem.


private void StartSavingProgress()
{
    CC.ClearCaseHelper.CheckOut("filepath");
    ...
    CC.ClearCaseHelper.CheckIn("filepath");
}

Jetzt wird die Progressbar jedoch nicht mehr korrekt animiert, sie hängt und wird nur sehr unregelmäßig geupdatet. Ich versteh das ganze nicht richtig, da ich doch den CheckOut/CheckIn Prozess in einen eigenen Thread ausgelagert habe.

Weiß einer von euch Rat?

Again what learned...

Gelöschter Account
vor 14 Jahren

clearcase (so ein dreckstool) hat die eigenheit, das es sich nciht nur tief ins system einbettet, sondern auch gerne mal die komplette leistung verfrisst.

evtl hat also deine anwendung nciht genug ressourcen zur verfügung (cpu time?) um sich upzudaten?

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 14 Jahren

Mit dem dreckstool stimme ich dir zu. Also meinst du auch das es einfach an der Performance liegt, und nicht daran das die CAL via COM interagiert und daher der GUI Thread nicht richtig bearbeitet wird? Weil im Studio zum Beispiel wird der progressbar auch aktuallisiert wenn man mehrere Files auscheckt.

Again what learned...

Gelöschter Account
vor 14 Jahren

aber selbst wenn du über com gehst, darf das doch keine auswirkungen auf einen anderen thread haben (also auch nciht dem ui thread).

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 14 Jahren

Mir ist zumindest nichts bekannt, deswegen frage ich ja hier. Na gut dann werde ich es wohl so machen müssen das ich den Progressbar auf 3 Stelle. Auschecken, manipulieren, und einchecken. Nur weil das aus und ein checken deutlich länger dauert als der manipulation, wollt ich einfach einen animierten Progressbar machen.

Wenn einer noch eine Idee hat, dann bitte posten.

Again what learned...

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo rollerfreak2,

wenn es nicht so ist, dass clearcase über einen nicht unterbrechbaren Treiber das gesamte System lahmlegt, sollte es reichen, die Priorität von dem clearcase-Thread bzw. clearcase selbst herunterzusetzen bzw. die Prio des GUI-Threads hochzusetzen. Wobei das Ändern der Priorität wegen der möglichen Nebenwirkungen immer die letzte Option sein sollte.

herbivore

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 14 Jahren

Das wäre eine Option, m.E. auch die letzte. Ich habe es trotzdem so gelöst wie oben beschrieben, daher die Progressbar.Maxmium auf 3 gesetzt und nach jedem Schritt wird das Value inkrementiert. Das funktioniert auch, da dort ja ClearCase kurze zeit lang nicht aktiv ist. Von daher ist das so akzeptabel, da der User ja nur mitbekommen soll das sich was tut 😃

Again what learned...