BackgroundWorker在C#

时间:2016-07-10 19:02:44

标签: c# backgroundworker

我正在努力刺激一个更大的应用程序但是现在这样做可以测试一些东西,所以我试图让它成为动态(真实世界)。所以我有一个名为Event的类,它只有字段getter和setters方法,这是我想从backgroundworker创建对象实例的类。我查看了一些通用示例,但它们似乎没有太大帮助,因为它们都基于GUI应用程序,我的是一个控制台应用程序。 无论如何,只要从主类调用类Event(假设用户提供了正确的输入),默认情况下就会创建一个事件

class Events
{
    BackgroundWorker bw = new BackgroundWorker();
    private Event newEvent;
    private List<Event> events = new List<Event>();
    private int listIndex = 0;

    public Events()
    {
        generateEvent(); //generate first event as soon as user initiates
        bw.WorkerReportsProgress = true;
        bw.DoWork += new DoWorkEventHandler(bw_doWork);
        bw.RunWorkerAsync();
    }

    private void bw_doWork(object sender, DoWorkEventArgs e)
    {
        int sleepTime = newEvent.random.Next(1000,5000); //events randomly created between 1 to 5 seconds
        BackgroundWorker worker = sender as BackgroundWorker;
        while (listIndex <= 15)
        {
            generateEvent();
            System.Threading.Thread.Sleep(sleepTime);
        }
    }

    private  void generateEvent()
    {
        newEvent = new Event();
        this.addEvent(newEvent);

    }
    private void addEvent(Event e){
        //check uniqueness and reassign value if necessary then add to the list
       e.setIdentifier(checkUniqueness(e.getIdentifier()));
       e.setX(checkUniqueness(e.getX()));
       e.setY(checkUniqueness(e.getY()));
       events.Add(newEvent);
       listIndex++;           
    }
    private int checkUniqueness(int num){
        foreach(Event eve in events){
            if ((num == eve.getIdentifier()) || //event identifier must be unique
                (num == eve.getX() && num == eve.getY())) //event x,y locations must hold one event
            {
                return checkUniqueness(num = newEvent.random.Next());//generate a new number for identifier
            }
        }
        return num;
    }
    public List<Event> getEvents()
    {
        return events;
    }
    public int getIndex()
    {
        return listIndex;
    }
}

然而,当应用程序运行时,后台工作者类不生成更多事件,这是我需要帮助的因为我花了很多时间在它上面但我似乎无法完成它。此外,当事件是从后台工作者创建的时候我想报告它(基本上只是将它添加到List并从主类调用一个方法来更新可用的事件数),我再也不知道该怎么做因为所有的例子基于GUI。

除非backgroundWorker不能在控制台应用程序上运行,否则非常感谢任何帮助? 提前谢谢。

0 个答案:

没有答案