Autor Beitrag
chh2807
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 30.07.11 00:47 
Huhu,

ich komme aus der C++ Ecke und hab früher mal ein paar Sachen mit dem Borland C++ Builder gemacht und bin gerade dabei mich aus beruflichen Gründen (kleine Testprogramme) in Visual C# ein zu arbeiten.

Also mein aktuelles Problem dreht sich um die Timer. Folgender Code bringt zwar die geforderte Funktion aber danach kommt ein Hinweis auf eine Exception.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        System.Timers.Timer aTimer = new System.Timers.Timer();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            aTimer.Interval = 500;
            aTimer.Enabled = true;
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        }
      
        private void  OnTimedEvent (object source, ElapsedEventArgs e)
        {
            this.textBox1.BackColor = System.Drawing.Color.Red;     
        }


Als Fehlermeldung erscheint nach der Ausführung:
InvaliOperationException. Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement textBox1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.

Kann mir jemand helfen den Code zu optimieren um die Exception zu vermeiden?

Danke.

Moderiert von user profile iconTh69: Quote- durch C#-Tags ersetzt

_________________
MFG
chh
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Sa 30.07.11 08:30 
Warum verwendest du den Timer aus System.Timers? Der Windows-Forms Timer macht das von dir gewünschte ohne Exception ;)
Ansonsten musst du mit Invoke arbeiten. msdn.microsoft.com/d...ibrary/zyzhdc6b.aspx
chh2807 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 30.07.11 09:45 
Danke, werd das gleich mal ausproboieren. Muss aber erstmal aufräumen und einkaufen :(

Den Timer aus der Toolbox hab ich gestern morgen irgendwann auch mal versucht aber bin nicht zum gewünschten Ergebnis gekommen. Wie seht denn da die korrekte Syntax aus? Ich habs versucht mit:
-Timer1.Enable();
-Timer1.Interval(1000);
-Timer1.Start();

Also mit ein paar Funktionen die mir die Kontextmenüs angeboten haben. Bin damit aber leider nicht zum Ziel gekommen. Andere Möglichkeiten hab ich dann durch google gefunden.

Danke

_________________
MFG
chh
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 30.07.11 10:01 
Hallo,

schau dir einfach das Beispiel in der MSDN dazu an: msdn.microsoft.com/d...ows.forms.timer.aspx

Hast du denn bei dir nicht lokal die Hilfe installiert?
chh2807 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 30.07.11 13:11 
Doch schon Bei der Suche nach Timer bin ich immer beim Systemtimer und nciht dem Windows Forms Timer ausgekommen. Jetzt wo ich darüber nachdenke hätte ich auch den Forms Timer markieren und F1 drücken können. Ja mei, Anfängerfehler halt :D
Auf der anderen Seite: woher hätte ich wissen sollen das es zig verschiedena Arten von Timer gibt? Ich hab auch nach "sleep", "delay", "wait" und sonstigen Bgeriffen gesucht die man mit dieser Funktionalität assoziieren könnte bzw. unter denen man in anderen Programmen diese Funktion findet.

Danke für den Link

_________________
MFG
chh