0

これは私のメインフォームクラスであり、内部には次のものがありますStop button click event:

public partial class MainWin : Form
{
    private Job job = new...

    private void btnStop_Click(object sender, EventArgs e)
    {
       job.state = true;
    }
}

停止ボタンがクリックされたときに、ジョブクラスのメンバーを false から true に変更します。この変数が true に変更されたときに、ジョブクラス内の特定のメソッドにアクセスして何かを実行したいと考えています。

public class Job
{
    public bool state { get; set; }

    private void processFile() // i want access to this method in order to change other class state
    {
       // do work
    }
}

どうすればできますか?

4

3 に答える 3

2

正確に何を意味するのかを伝えるのは本当に難しいですが、プロパティが設定されているときにメソッドを呼び出す 1 つの方法は、自動プロパティを展開してそれを正確に実行することです。

public class Job
{
    private bool state;
    public bool State
    {
       get { return this.state; }
       set
       {
          this.state = value;
          processFile();
       } 

    private void processFile()
    {
       // do work
    }
}

ただし、この小さなコードを推測して見るだけで、やり方を再設計したくなるかもしれません。

于 2013-06-04T09:44:08.260 に答える
0

Job次のようにクラスを作成します。

public class Job
{
    private bool _isRunning = false;
    public bool IsRunning { get { return _isRunning; } }

    public void StartProcessing()
    {
        if (_isRunning)
        {   
            // TODO: warn?      
            return;
        }
        ProcessFile();
    }

    public void StopProcessing()
    {
        if (!_isRunning)
        {   
            // TODO: warn?
            return;
        }
        // TODO: stop processing
    }

    private void ProcessFile()
    {
        _isRunning = true;

        // do your thing

        _isRunning = false;
    }
}

次に、次のように消費します。

public partial class MainWin : For
{
    private Job _job = new Job();

    private void StartButton_Click(object sender, EventArgs e)
    {
        if(!_job.IsRunning)
        {
            _job.StartProcessing();
        }
    }

    private void StopButton_Click(object sender, EventArgs e)
    {
        if(_job.IsRunning)
        {           
            _job.StopProcessing();
        }
    }
}

演習として、スレッドの安全性を除外しました。

于 2013-06-04T09:43:28.700 に答える