• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C#/ PictureBox /Animacja z użyciem timera.

Object Storage Arubacloud
0 głosów
868 wizyt
pytanie zadane 7 lipca 2016 w C# przez Piotr Bryła Początkujący (310 p.)

Witam,

Próbuję zrobić animację. Po naciśnięciu przycisku odpala się timer, który co 100 milisekund odpala metodę która powinna ruszyć PictureBox z moim obrazkiem w lewo. Kiedy tą samą instrukcje podepnę bezpośrednio pod przycisk obrazek rusza się tak jak chcę, jednak kiedy chcę aby timer ją wywoływał konsola wyrzuca mi

Exception thrown: 'System.InvalidOperationException' in System.Windows.Forms.dll

Używam MS Visual Studio 15.

Czy ktoś może naprowadzić mnie na rozwiązanie, albo napisać gdzie leży problem?

Zamieszczam kod poniżej.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
        
    {  
        private System.Timers.Timer doors0;

        public Form1()
        {
            InitializeComponent();
            doors0 = new System.Timers.Timer();
            doors0.Interval = 100;
            doors0.Elapsed += new System.Timers.ElapsedEventHandler(this.D0timer_Tick);
            
        }

        void D0timer_Tick(object sender, EventArgs e)
        {
            leftDoor0.Location = new Point(leftDoor0.Left - 1, leftDoor0.Top);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            doors0.Start();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            doors0.Enabled = false;
        }
        
       } 
    }

 

1 odpowiedź

+1 głos
odpowiedź 7 lipca 2016 przez obl Maniak (51,280 p.)
wybrane 8 lipca 2016 przez Piotr Bryła
 
Najlepsza

Nie wiem po co ręcznie tworzysz obiekt timera System.Timers.Timer. Do tego jest odpowiednia kontrolka w Toolbarze o nazwie Timer. Obiekt który tworzysz co prawda też umożliwia wykonywanie operacji co jakiś zadany czas ale dzieje się to w oddzielnie utworzonym wątku więc nie możesz wykonywać operacji na obiektach twojej klasy (a w zasadzie nie możesz tego robić w tak bezpośredni sposób). Dzieje się tak dlatego, że twój timer nie działa w tym samym wątku co twoja forma.

komentarz 8 lipca 2016 przez Piotr Bryła Początkujący (310 p.)
Dziękuję, działa jak należy.

Podobne pytania

0 głosów
2 odpowiedzi 145 wizyt
0 głosów
1 odpowiedź 779 wizyt
0 głosów
0 odpowiedzi 218 wizyt
pytanie zadane 6 listopada 2022 w C# przez Krzysiek612 Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...