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

很难说出您的确切意思,但是在设置属性时调用方法的一种方法是扩展 auto 属性并做到这一点。

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 回答
0

如果真的不想公开你的私有方法,你可以这样做:

public class Job
{
    private bool state;

    public bool State
    {
        get
        {
            return state;
        }
        set
        {
            if (state != value)
            {
                state = value;
                OnStateChanged();
            }
        }
    }

    private void OnStateChanged()
    {
        if (state) // or you could use enum for state
            Run();
        else
            Stop();
    }

    private void Run()
    {
        // run
    }

    private void Stop()
    {
        // stop
    }
}

但是你真的应该考虑创建公共Job.Run方法并保持Job.State只读。如果你想让对象执行一些操作,方法会更适合这个。

于 2013-06-04T09:50:37.707 回答