Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [c#] delegati ed eventi

    ciao|
    ho un problema usando i delegati...
    ho questo codice:
    codice:
    #region Using directives
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Windows.Forms;
    
    #endregion
    
    namespace Delegates
    {
        partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                //clock = new Clock(digital);
                pulsed = new Ticker();
    
            }
    
            private void start_Click(object sender, System.EventArgs e)
            {
                //this.clock.Start();
                pulsed.tick += new Ticker.Tick(pulsed_tick);
                
            }
    
            void pulsed_tick(int hh, int mm, int ss)
            {
                string ora = string.Format("{0:D2}:{1:D2}:{2:D2}", hh, mm, ss);
                this.digital.Text = ora;
                //throw new Exception("The method or operation is not implemented.");
            }
    
            private void stop_Click(object sender, System.EventArgs e)
            {
                //this.clock.Stop();
                pulsed.tick -= new Ticker.Tick(pulsed_tick);
                
            }
            private Ticker pulsed;
            //private Clock clock;
        }
    }
    dove nella label digital dovrebbe apparire l'ora...
    allora, la stringa ora è ok, mentre quando tenta di scrivere sulla label (riga sotto) si schianta!

    che devo fare??

    tnx!
    ...l'importante è non cadere dal palco...
    www.sisimizi.com

    : ghiboz : | ° nani ° | : gBlog :

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Penso che una descrizione dell'errore più tecnica di "si schianta" sarebbe d'obbligo...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    non si schianta con messaggio di errore, ma nell'output di visual studio appare questo:
    codice:
    A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll
    ...l'importante è non cadere dal palco...
    www.sisimizi.com

    : ghiboz : | ° nani ° | : gBlog :

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Ma questo oggetto Ticker da dove arriva?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    hai ragione...
    codice:
    namespace Delegates
    {
    	using System.Collections;
    	using System.Timers;
        using System.Windows.Forms;
    
    	class Ticker
    	{
            public delegate void Tick(int hh, int mm, int ss);
            public event Tick tick;
            
            public Ticker()
    		{
    			this.ticking.Elapsed += new ElapsedEventHandler(this.OnTimedEvent);
    			this.ticking.Interval = 1000; // 1 second
    			this.ticking.Enabled = true;
            }
    
    		private void Notify(int hours, int minutes, int seconds)
    		{
                if (this.tick != null)
                {
                    this.tick(hours, minutes, seconds);
                }
            }
    	
    		private void OnTimedEvent(object source, ElapsedEventArgs args)
    		{
    			int hh = args.SignalTime.Hour;
    			int mm = args.SignalTime.Minute;
    			int ss = args.SignalTime.Second;
    			Notify(hh, mm, ss);
    		}
    
           private System.Timers.Timer ticking = new System.Timers.Timer();
    	}
    }
    ...l'importante è non cadere dal palco...
    www.sisimizi.com

    : ghiboz : | ° nani ° | : gBlog :

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Indicativamente, credo che il problema sia dato dalla classe System.Timers.Timer, che opera su un thread separato, al contrario di System.Windows.Forms.Timer, che invece si basa sull'invio del messaggio WM_TIMER, quindi lavora in modo sincrono rispetto al thread dell'applicazione, analogamente a quanto avviene con il Timer di VB6.

    L'accesso multithreading ad una risorsa condivisa quale è la Label, a mio avviso, genera il problema segnalato.

    Dovresti sostituire il Timer con quello definito nel namespace System.Windows.Forms, oppure strutturare la tua applicazione per supportare correttamente il multithreading.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    ecco, come si fa a scrivere nella label da un altro thread??

    invoke???
    ,ma come funziona??

    tnx!
    ...l'importante è non cadere dal palco...
    www.sisimizi.com

    : ghiboz : | ° nani ° | : gBlog :

  8. #8
    Non puoi lavorare su oggetti dell'interfaccia grafica da thread diversi da quello che li ha costruiti, poiché non sono oggetti thread safe (cerca un momento nel forum...).
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da ghiboz
    ecco, come si fa a scrivere nella label da un altro thread??
    Ma sei sicuro che per la tua esigenza sia necessario scomodare il multithreading?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Originariamente inviato da alka
    Ma sei sicuro che per la tua esigenza sia necessario scomodare il multithreading?
    beh, quello è un esempio per capire come funzionan sti thread...
    poi quel che devo fare sarà molto + complesso!!

    tnx!
    ...l'importante è non cadere dal palco...
    www.sisimizi.com

    : ghiboz : | ° nani ° | : gBlog :

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.