后台工作者,C# - 工人之间共享的对象 - 创建问题

时间:2017-03-10 06:42:52

标签: c# multithreading backgroundworker

我面临一个严重的问题,即将一条记录中的数据复制到另一条记录(Overlay)。我正在使用MQ请求使用我的C#代码与大型机系统进行通信。我们面临的问题非常随机/罕见,向主机发送更新请求,以获取该线程先前处理的另一条记录的一个记录副本信息。我正在使用下面的代码后台工作者方法在我的服务器上创建多线程。

我的问题是:一个工人创建的对象可以被另一个工作使用吗?那可能吗 ?这可能是叠加数据的原因之一。

请帮助你的建议!!

        BackgroundWorker worker;
        worker = new BackgroundWorker();
        worker.DoWork += new DoWorkEventHandler(DoWork);
        worker.ProgressChanged += new ProgressChangedEventHandler(ProgressChanged);
        worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(RunWorkerCompleted);
        worker.WorkerReportsProgress = true;
        worker.RunWorkerAsync();

1 个答案:

答案 0 :(得分:0)

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        backgroundWorker1.RunWorkerAsync();
    }

    struct SOmeData { }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        SOmeData data = new SOmeData();

        // backgroundWorker1 result
        e.Result = data;
    }

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        // backgroundWorker1 result
        SOmeData data = (SOmeData)e.Result;

        // start backgroundWorker2
        backgroundWorker2.RunWorkerAsync(data);
    }

    private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
    {
        // backgroundWorker1 result
        SOmeData data = (SOmeData)e.Argument;
    }
}