2012-10-28 2 views
3

у меня есть один класс, где я хранить мои данные:Отдельные данные между несколькими экземплярами

class Model 
{ 
    public int Progress{ get; set; } 
} 

Второй класс, где я могу изменить эти данные и уведомлять абонентов об изменениях:

class Copy 
{ 
    //... 
    public static event EventHandler Changed; 
    Model model = new Model(); 
    ProgressForm progressForm = new ProgressForm(); 

    public void Start() 
    { 
     for(int i=0;i<100;i++) 
     { 
     model.Progress++; 
     if(Changed!=null) 
      Changed(this,EventArgs.Empty); 
     } 
    } 

    //... 
} 

и что-то вроде этого :

class ProgressForm 
{ 
    Model model; 
    public ProgressForm() 
    { 
     model = new Model(); 
     Copy.Changed+=new Changed(ShowProgress); 
    } 

    void ShowProgress() 
    { 
     progressBar1.value = model.Progress; 
    } 
} 

Как я могу изменить данные для каждой модели отдельно и показать эти данные в ProgressForm, когда я запускаю два или более экземпляра Copy?

Main() 
{ 
    Copy copy = new Copy(); 
    copy.Start(); 
    Copy copy2 = new Copy(); 
    copy2.Start(); 
} 
+1

Ваш класс 'model' не будет даже компиляции, чтобы начать с. Насколько вы понимаете, что означает 'static'? –

+0

Уточните код, пожалуйста. –

+0

Я немного изменил свой код. –

ответ

1
public class Model 
{ 
    public int progress; 
    public event EventHandler ProgressChanged; 

    public int Progress 
    { 
     get { return progress; } 
     set 
     { 
      progress = value; 
      if (ProgressChanged != null) 
      { 
       ProgressChanged(this, null); 
      } 
     } 
    } 
} 

public class Copy 
{ 
    public List<Model> models = new List<Model>(); 
    public event EventHandler CopyProgrss; // FormModel binded to this event. 
    public void AddModel(Model m) 
    { 
     this.models.Add(m); 
     m.ProgressChanged += new EventHandler(m_ProgressChanged); 
    } 

    void m_ProgressChanged(object sender, EventArgs e) 
    { 
     Model currentModel = sender as Model; 
     int modelProgress = currentModel.Progress; 
     if (CopyProgrss != null) 
      CopyProgrss(modelProgress,null); // here you can caluclate your over progress. 
    } 
} 
+0

Спасибо. Я думал почти о том же –

+0

, что вы можете ... вы можете больше узнать о шаблоне наблюдателя для более продвинутого решения. –

Смежные вопросы