dakle imam aplikaciju koja se sastoji od nekoliko windows formi i jedne klase koja obavlja sav posao. klasa se spaja na vanjski server i prikuplja podatke s njega... sad mene zanima na koji načim mogu te podatke proslijediti do svake forme bez da koristim public stringove u svakoj od formi... da li je to moguće riješiti preko threadova? ako je molio bih nekakav tut gdje je to lijepo objašnjeno. najveći probem sa svime što sam probao je taj što se funkcija unutar klase mora odvrtiti do kraja da bi poslala jednoj formi, dok druge uopće ne dohvati, recimo ima pretlju od 0 do 9 i klasa mi pošalje samo broj 9 do prve forme a druge ništa...
- +/- sve poruke
- ravni prikaz
- starije poruke gore
public class MyDataClass
{
public string Data1 { get; set; }
public string Data2 { get; set; }
public string Data3 { get; set; }
// ...
}
interface INotification
{
void NotifyDataChanged( MyDataClass data );
string NotificationName { get; }
}
public class NotificationManager
{
#region Members
private static SortedList<string, INotification> _NotificationsList = new SortedList<string, INotification>();
#endregion
#region Methods
public static void Register( INotification notification )
{
_NotificationsList.Add( notification.NotificationName, notification );
}
public static void Unegister( INotification notification )
{
_NotificationsList.Remove( notification.NotificationName );
}
public static void NotifyDataChanged( MyDataClass data )
{
foreach ( var item in _NotificationsList )
{
item.Value.NotifyDataChanged( data );
}
}
#endregion
}
public class MyForm : Form, INotification
{
#region Events
private void MyForm_Load( object sender, EventArgs e )
{
NotificationManager.Register( this );
}
private void MyForm_FormClosed( object sender, FormClosedEventArgs e )
{
NotificationManager.Unegister( this );
}
#endregion
#region Methods
public void NotifyDataChanged( MyDataClass data )
{
// ovdje uzimaš podatke koje prosljeđuješ
}
#endregion
#region INotification Members
public string NotificationName
{
get { return this.Name; }
}
#endregion
}
Evo jedan primjer kako da to odradiš. U osnovi svaka forma koju imaš neka bude nasljeđena iz INotification i registrirana u NotificationManager.
Podatke koje dobiješ sa servera spremiš u svoju klasu(u ovom primjeri je to MyDataClass) i proslijediš ih kroz NotificationManager.NotifyDataChanged(data);
To je više manje to, ti prilagodi za svoju aplikaciju kako ti odgovara.
dakle imam aplikaciju koja se sastoji od nekoliko windows formi i jedne klase koja obavlja sav posao. klasa se spaja na vanjski server i prikuplja podatke s njega... sad mene zanima na koji načim mogu te podatke proslijediti do svake forme bez da koristim public stringove u svakoj od formi... da li je to moguće riješiti preko threadova? ako je molio bih nekakav tut gdje je to lijepo objašnjeno. najveći probem sa svime što sam probao je taj što se funkcija unutar klase mora odvrtiti do kraja da bi poslala jednoj formi, dok druge uopće ne dohvati, recimo ima pretlju od 0 do 9 i klasa mi pošalje samo broj 9 do prve forme a druge ništa...
Iskoristi polimorfizam i nasljeđivanje, to če ti biti najjednostavnije
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication1
{
public class MyDataClass
{
public string Data1 { get; set; }
public string Data2 { get; set; }
public string Data3 { get; set; }
}
interface INotification
{
void NotifyDataChanged(MyDataClass data);
string NotificationName { get; }
}
public class NotificationManager
{
#region Members
private static SortedList<string, INotification> _NotificationsList = new SortedList<string, INotification>();
#endregion
#region Methods
public static void Register(INotification notification)
{
_NotificationsList.Add(notification.NotificationName, notification);
}
public static void Unegister(INotification notification)
{
_NotificationsList.Remove(notification.NotificationName);
}
public static void NotifyDataChanged(MyDataClass data)
{
foreach (var item in _NotificationsList)
{
item.Value.NotifyDataChanged(data);
}
}
#endregion
}
}
nakon što sam unjeo tvoj kod i pokušao ga kompajlati izbaci mi dvije greške :( , pokušao sam u visual c 2010
Error 1 Inconsistent accessibility: parameter type 'WindowsFormsApplication1.INotification' is less accessible than method 'WindowsFormsApplication1.NotificationManager.Register(WindowsFormsApplication1.INotification)'
Error 2 Inconsistent accessibility: parameter type 'WindowsFormsApplication1.INotification' is less accessible than method 'WindowsFormsApplication1.NotificationManager.Unegister(WindowsFormsApplication1.INotification)'
Samo stavi da INotification bude public.
public interface INotification
