C#卖书问题【C#】

为了实现这个卖书的Demo,我们可以使用C#的Task类来创建7个线程,每个线程都卖同一本书。为了避免最后一本书被多卖,我们可以在每个线程中添加一个判断,当书的数量为0时,线程就停止卖书。

下面是一个简单的实现:

1. 首先,我们需要定义一个Book类,用于表示书的信息,包括书名和数量。

2. 然后,我们需要定义一个SellBook方法,用于卖书。在这个方法中,我们需要使用lock语句来保证线程安全,同时需要判断书的数量是否为0,如果为0,则停止卖书。

3. 接下来,我们可以使用Task类来创建7个线程,每个线程都调用SellBook方法来卖书。

4. 最后,我们需要在程序中添加一个按钮,当用户点击这个按钮时,程序开始卖书。

下面是代码示例:

```
// Book类,用于表示书的信息
public class Book
{
    public string Name { get; set; } // 书名
    public int Quantity { get; set; } // 数量
}

public partial class Form1 : Form
{
    private Book book = new Book { Name = "C#入门教程", Quantity = 100 }; // 初始化书的信息

    public Form1()
    {
        InitializeComponent();
    }

    // 卖书方法
    private void SellBook()
    {
        while (true)
        {
            lock (book) // 使用lock语句保证线程安全
            {
                if (book.Quantity == 0) // 如果书的数量为0,则停止卖书
                {
                    break;
                }

                book.Quantity--; // 卖掉一本书
                this.BeginInvoke(new Action(() => { textBox1.AppendText($"线程{Thread.CurrentThread.ManagedThreadId}卖出了一本书,剩余{book.Quantity}本书\n"); })); // 在文本框中显示卖书信息
            }

            Thread.Sleep(100); // 线程休眠100毫秒
        }
    }

    // 开始卖书
    private void button1_Click(object sender, EventArgs e)
    {
        Task[] tasks = new Task[7]; // 创建7个任务

        for (int i = 0; i < 7; i++)
        {
            tasks[i] = Task.Factory.StartNew(SellBook); // 使用Task类创建线程
        }

        Task.WaitAll(tasks); // 等待所有线程执行完毕
        textBox1.AppendText("书已经卖完了!\n"); // 在文本框中显示卖书结束信息
    }
}

```

你可能感兴趣的:(C#中级,c#,开发语言)