1

呼び出し位置でイベント ハンドラーから返された値を取得するにはどうすればよいですか?? 私がやりたいことは、このようなものです

             ""  int a = timer.Elapsed += new ElapsedEventHandler((sender, e) => 
                on_time_event(sender, e, draw, shoul_l));   ""


                timer_start = true;
                timer.Interval = 2000;
                timer.Start();
                timer.Elapsed += new ElapsedEventHandler((sender, e) => 
                on_time_event(sender, e, draw, shoul_l));


                private int on_time_event(object sender, ElapsedEventArgs e,  
                DrawingContext dcrt, System.Windows.Point Shoudery_lefty)
                 {
                  .
                  .
                  .
                  .
                   return a_value;
                  }
4

1 に答える 1

1

それを起動したクラスのメンバー変数に値を配置します。必要に応じて、ロックを使用して安全なマルチプロセッシングを許可します。これは WPF であるため、クラスを INotifyPropertyChanged に準拠させ、画面上のコントロールにバインドします。

編集(OPのリクエストによる)

タイマーの代わりにバックグラウンド ワーカーを使用しますが、概念は同じです (タイマーで GUI コントロールを更新しないように注意してください。ただし、BW はそれを可能にするように設計されています)。

public partial class Window1 : Window,  INotifyPropertyChanged
{
    BackgroundWorker bcLoad = new BackgroundWorker();
    private string _data;

    public string Data 
    { 
       get { return _data;} 
       set { _data = value; OnPropertyChanged("Data"); }
    }

    public Window1()
    {
        InitializeComponent();

        bcLoad.DoWork             += _backgroundWorker_DoWork;
        bcLoad.RunWorkerCompleted += _backgroundWorker_RunWorkerCompleted;
        bcLoad.RunWorkerAsync();
    }
    protected virtual void OnPropertyChanged( string propertyName )
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler( this, new PropertyChangedEventArgs( propertyName ) );
        }
    }
 }

ここで作業が行われます

void _backgroundWorker_DoWork( object sender, DoWorkEventArgs e )
{
   e.Result = "Jabberwocky"; 
}

ここで、GUI の値を安全に設定します。

void _backgroundWorker_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e )
{
    Data = (string) e.Result;
}

コントロールを使用した別の例については、私のブログを参照してください: C# WPF: Threading, Control Updating, Status Bar and Cancel Operations Example All In One

于 2012-11-01T12:36:56.537 に答える