C# 如何添加另一个消费者?

C# 如何添加另一个消费者?,c#,.net,C#,.net,如何在我的程序中添加另一个消费者?我试过了,但没用。。。 我找到这篇文章,但它不是我需要的,因为我不需要锁。。。我需要不用上课之类的。就用我的代码。。请帮忙:) private int-occupiedBufferCount=0; 私有int占用BufferCount2=0; int i=0; 私人空位制作人() { int how_mound_numbers=Convert.ToInt32(textBox3.Text); 使用(StreamWriter writer=newstreamwrit

如何在我的程序中添加另一个消费者?我试过了,但没用。。。 我找到这篇文章,但它不是我需要的,因为我不需要锁。。。我需要不用上课之类的。就用我的代码。。请帮忙:)

private int-occupiedBufferCount=0;
私有int占用BufferCount2=0;
int i=0;
私人空位制作人()
{
int how_mound_numbers=Convert.ToInt32(textBox3.Text);
使用(StreamWriter writer=newstreamwriter(“random_skaiciai.txt”))
{
对于(i=0;i<多少个数字;i++)
{  
监视。输入(此);
如果((占用的缓冲计数==1)| |(占用的缓冲计数2==1))
{
监视器。等等(这个);
}
++占用缓冲计数;
缓冲区=i;
随机rnd=新随机();
数字=i;
//数字=rnd.Next(nuo,iki);
writer.WriteLine(数字+“”);
prm=假;
fib=假;
监视器。脉冲(本);
监控。退出(本);
如果(isCanceled==true)
打破
}
writer.Close();
Set_p(kiek);
}
}
私有void Consumer1()
{
int how_mound_numbers=Convert.ToInt32(textBox3.Text);
使用(StreamWriter=newstreamwriter(“Primary_numbers.txt”))
{
而(我<多少个数字)
{
监视。输入(此);
如果((占用BufferCount==0))
{
监视器。等等(这个);
}
--占用缓冲计数;
如果(数字!=0)
如果(素数(数字)=真)
{
writer.WriteLine(数字+“”);
}
prm=真;
监视器。脉冲(本);
监控。退出(本);
如果(isCanceled==true)
打破
}
writer.Close();
}
}
私有void Consumer2()
{
int how_mound_numbers=Convert.ToInt32(textBox3.Text);
使用(StreamWriter=newstreamwriter(“fibon_Numbers.txt”))
{
而(我<多少个数字)
{
监视。输入(此);
如果((占用BufferCount2==0))
{
监视器。等等(这个);
}
--占用缓冲区2;
如果(数字!=0)
如果(isfibonaci(数字)==真)
writer.WriteLine(数字+“”);
监视器。脉冲(本);
监控。退出(本);
如果(isCanceled==true)
打破
}
writer.Close();
}
}

您似乎正在UI线程中执行CPU限制的工作。你不必那么做,我不明白你的意思?我认为解决这个问题很容易,因为只有一个消费者在工作。。。但与其他人不(
private int occupiedBufferCount = 0;
    private int occupiedBufferCount2 = 0;
    int i = 0;
     private void Producer()
        {
            int how_much_numbers = Convert.ToInt32(textBox3.Text);            
            using (StreamWriter writer = new StreamWriter("random_skaiciai.txt"))
            {
                for (i = 0; i < how_much_numbers; i++)
                {  
                    Monitor.Enter(this);
                    if ((occupiedBufferCount == 1) || (occupiedBufferCount2 == 1))
                    {
                        Monitor.Wait(this);
                    }
                    ++occupiedBufferCount;
                    buffer = i;
                    Random rnd = new Random();
                    numbers = i;
                    //numbers = rnd.Next(nuo, iki);
                    writer.WriteLine(numbers + "");
                    prm = false;
                    fib = false;
                    Monitor.Pulse(this);
                    Monitor.Exit(this);
                    if (isCanceled == true)
                        break;
                }
                writer.Close();
                Set_p(kiek);
            }
    }
   private void Consumer1()
        {
            int how_much_numbers = Convert.ToInt32(textBox3.Text);
            using (StreamWriter writer = new StreamWriter("Primary_numbers.txt"))
            {
                    while (i < how_much_numbers)
                    {
                        Monitor.Enter(this);
                        if ((occupiedBufferCount == 0))
                        {
                            Monitor.Wait(this);
                        }
                        --occupiedBufferCount;
                        if (numbers != 0)
                            if (prime_num(numbers) == true)
                            {
                                writer.WriteLine(numbers + "");
                            }
                        prm = true;
                        Monitor.Pulse(this);

                        Monitor.Exit(this);

                        if (isCanceled == true)
                            break;
                }
                writer.Close();
            }
        }
     private void Consumer2()
        {
            int how_much_numbers = Convert.ToInt32(textBox3.Text);
            using (StreamWriter writer = new StreamWriter("fibon_Numbers.txt"))
            {
                while (i < how_much_numbers)
                {
                    Monitor.Enter(this);
                    if ((occupiedBufferCount2 == 0))
                    {
                        Monitor.Wait(this);
                    }
                    --occupiedBufferCount2;
                    if (numbers != 0)
                      if (isfibonaci(numbers) == true)
                         writer.WriteLine(numbers + "");
                    Monitor.Pulse(this);
                    Monitor.Exit(this);
                    if (isCanceled == true)
                        break;
                }
                writer.Close();
            }
        }