C#Background Worker类调用类库函数

时间:2014-07-29 09:24:58

标签: c# multithreading backgroundworker

我正在创建一个类库,因此我可以显示ADC的报告,图形和其他内容。我将它作为一个类库,所以我可以在任何需要它的项目中包含一个dll。

目前,当我从中运行一个函数时,程序似乎没有响应,这是因为唯一的线程(主应用程序线程)完全用于已调用的类库函数。

修复此问题的方法是使用后台工作程序调用函数然后运行该调用函数 - 我的想法是否正确?

从这个基础上我开始创建自己的课程(虽然我以前从未使用过背景工作者而且对C#很新,我使用C ++)

我的backgroundWorker课程的整个基础是易用性。我想有一个简单的函数,我可以放入一个方法,然后它将在另一个线程中运行该方法。试图在这里寻求简单。

我目前的代码;

class backgroundWorker
{
    public BackgroundWorker bw;
    public delegate void RunFunction();
    public RunFunction thisFunction;

    public backgroundWorker(RunFunction newFunction)
    {
        thisFunction = newFunction;
        bw = new BackgroundWorker();
        bw.WorkerReportsProgress = true;
        bw.DoWork += bw_DoWork;
        bw.ProgressChanged += bw_ProgressChanged;
        bw.RunWorkerCompleted += bw_RunWorkerCompleted;
    }
}
public void start()
{
    bw.RunWorkerAsync(thisFunction);
}

这是该课程的第一部分。当我创建默认构造函数时,在括号中我放入了我想要使用的函数;

if (tabControl1.SelectedIndex == 1)
{
    newNiDevice.setInputs(newNiDevice.Ai1, newNiDevice.Ai2, newNiDevice.Ai3, newNiDevice.Ai4,);
    newNiDevice.frequency = 1000; // 1000 samples per second
    newNiDevice.time = 10; // 10 seconds
    bgW = new backgroundWorker(newNiDevice.createMultiSample);
    bgW.start();
    // newNiDevice.createMultiSample();
    newNiDevice.populateChartMulti(chart1);
}

上面的代码用于对提供电压的10V电源进行采样,然后我的程序获取数据,从某些通道读取频率(Hz - 每秒采样数)和时间。然后将其放入List中,然后将其绘制成折线图。 - 不必担心这部分,代码完美无缺。

所以,我想它不会只需要我创建我调用newNiDevice.createMultiSample();函数的默认构造函数吗?我希望我能够达到这一点,但此刻它只是崩溃了。这不是我的问题所在。

尝试创建多重采样以绘制图表后出现的情况 - 我的想法是,它如何绘制没有任何数据的图表?因此,函数调用未启动。

0 个答案:

没有答案