Autor Beitrag
Maliko
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Di 02.04.13 12:14 
Hi,

ich habe da mal eine Frage an euch. Und zwar habe ich das Problem, das ich in meinem Programm eine automatische Aktualisierung laufen habe, diese funktioniert auch einwandfrei, bis ich den Intervall ändere. Der Intervall wird zwar geändert, dafür wird der Backgroundworker dann allerdings zweimal direkt hintereinander angestoßen.

Hat jemand von euch vielleicht ne Ahnung woran das liegen kann? Ich ändere den Intervall auf folgende Art und weise:

ausblenden C#-Quelltext
1:
2:
3:
AutoSyncHandler.StopSyncronisation(truefalse);
AutoSyncHandler.ChangeIntervall(int.Parse(cb_Frachtenliste.Text), 0);
AutoSyncHandler.StartSyncronisation(truefalse);


Dahinter verstecken sich folgende Funktionen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public static void StartSyncronisation(bool frachtenliste, bool kundenliste)
{
    if (frachtenliste)
        m_frachtenliste.Start();

    if (kundenliste)
        m_kundenliste.Start();
}


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public static void StopSyncronisation(bool frachtenliste, bool kundenliste)
{
    if (frachtenliste)
        m_frachtenliste.Stop();

    if (kundenliste)
        m_kundenliste.Stop();
}


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public static void ChangeIntervall(int frachtenliste, int kundenliste)
{
    if (frachtenliste != 0)
        m_frachtenliste.Interval = frachtenliste * 60000;

    if (kundenliste != 0)
        m_kundenliste.Interval = kundenliste * 60000;
}


Kann mir jemand von euch vielleicht sagen, was ich da übersehe? Danke euch schon einmal im Vorraus.

Lg Maliko
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 02.04.13 14:05 
Hallo Maliko :welcome:

wo verwendest du denn da einen BackgroundWorker? Die Methoden Start, Stop sowie die Eigenschaft Interval gibt es bei der Klasse Timer - entweder aus dem Namensbereich System.Timers oder System.Windows.Forms, d.h. welchen verwendest du?
Maliko Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Di 02.04.13 14:35 
Hoi,

der Backgroundworker wird vom Tick-Event aus gestartet. Ich hab den Fehler inzwischen aber gefunden. Ich habe noch eine weitere Methode nämlich diese:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
public static void InitHandler(int frachtenliste, int kundenliste)
{
    bool frachtenlisteBool = false;
    bool kundenlisteBool = false;

    if (frachtenliste != 0)
        frachtenlisteBool = true;

    if (kundenliste != 0)
        kundenlisteBool = true;

    if (kundenlisteBool && frachtenlisteBool)
    {
        ChangeIntervall(frachtenliste, kundenliste);
        m_frachtenliste.Tick += new EventHandler(m_frachtenliste_Tick);
        m_kundenliste.Tick += new EventHandler(m_kundenliste_Tick);
        StartSyncronisation(truetrue);
    }
    else if (kundenlisteBool && ! frachtenlisteBool)
    {
        ChangeIntervall(frachtenliste, kundenliste);
        m_kundenliste.Tick += new EventHandler(m_kundenliste_Tick);
        StartSyncronisation(falsetrue);
    }
    else if(!kundenlisteBool && frachtenlisteBool)
    {
        ChangeIntervall(frachtenliste, kundenliste);
        m_frachtenliste.Tick += new EventHandler(m_frachtenliste_Tick);
        StartSyncronisation(truefalse);
    }
}


und die Methode habe ich ausversehen noch einmal aufgerufen, wenn ich den Intervall geändert habe (weil ich vergessen habe den in eine If Abfrage zu packen). Jetzt funktioniert es einwandfrei. Es handelt sich übrigens um System.Windows.Forms