2011-06-28 6 views
0

これはビット文字化けしている場合は、私は私のWindowsフォームでQuartz.NETを使用しています、基本的にはASP.NET別のクラスを経由して、フォームにアクセスする

で数ヶ月過ごしたWindowsフォーム上の新しいビット、よ私を許してアプリケーション - ジョブが実行されると、別のクラスファイルが起動されます。渡されるパラメータにはフォームへの参照が含まれていないため、これを変更することはできません。

私がしたいのは、ジョブが実行された後にページ上のグリッドをリフレッシュすることです。ジョブが実行されたことを「告げる」唯一の場所は、フォームコードではなく他のファイルです。フォームのメソッド/オブジェクトにアクセスする方法を理解することはできません。そのメソッドの新しいインスタンスを開始することなく、私は実行したくありません。

EDIT:クラスのメンバーはstaticなかった場合は、次のことができるように文句を言わない、私はちょうど

答えて

1

なぜあなたのクラスからwinformにイベントを発生させないのですか?これを行うためのエレガントな方法です。メッセージの送信を行うには、interopを使用して、ウィンドウのハンドルを必要とするsendMessageを呼び出すことができます。

0

Actualy別のクラスからすでにオープンメインフォームにメッセージか何かを送っする方法をしたい、まとめるとそのクラスのインスタンスなしでアクセスしてください。あなたの行動がそれに適用されるクラスの同じインスタンスを獲得しようとします。

0

最も簡単な方法は、メインフォームのインスタンスをQuartz.NETイベントを使用するクラスに渡すことです。消費するクラスはメインフォームのメソッドを呼び出すことができます。それはようなものになるだろうので、私は、そのクラスがどこか、とにかくメインフォームで作成されます推測している:

var quartzConsumer = new QuartzConsumer(this); 

... 
class QuartzConsumer { 
    MainForm _form; 
    public QuartzConsumer(MainForm form) { 
     _form = form; 
     ... 
    } 
    void OnTimer(..) { 
     _form.UpdateGrid(); 
    } 
} 

別の解決策は、上のイベントをサブスクライブするために、メインフォームのためです@hundryMindが言うようにEDIT、消費クラス:

class QuartzConsumer { 
    public delegate void DataChangedEventHandler(); 
    public event DataChangedEventHandler DataChanged; 
    void OnTimer(..) { 
     if (this.DataChanged != null) this.DataChanged(); 
    } 
} 

// in MainForm: 
var quartzConsumer = new QuartzConsumer(..); 
quartzConsumer.DataChanged += this.OnDataChanged; 
... 
void OnDataChanged() { 
    // update the grid 
} 
関連する問題