Channel 实战:WinForms 中的生产者-消费者模式

private async void button1_Click(object sender, EventArgs e)
{
      await TestChannelAsync();
}


private async Task TestChannelAsync()
{
      var channel = Channel.CreateUnbounded<int>();
      var t = Task.Run(async () =>
      {
          for (int i = 0; i < 100; i++)
          {
              await Task.Delay(TimeSpan.FromMilliseconds(50));
              BeginInvoke(() =>
              {
                  textBox2.Text = i.ToString();
                  progressBar1.Value = i;
              });
              await channel.Writer.WriteAsync(i);
              //if (i > 7)
              //{
              //    channel.Writer.Complete();
              //    break;
              //}
          }

          channel.Writer.Complete();
      });

      var c = Task.Run(async () =>
      {

          await foreach (var item in channel.Reader.ReadAllAsync())
          {
              BeginInvoke(new Action(() =>
              {
                  textBox1.Text = item.ToString();
              }));
          }

          BeginInvoke(new Action(() =>
          {
              textBox1.Text = "done";
          }));

      });

      // 等待生产者和消费者都完成
      await Task.WhenAll(t, c);
      lbinfo.Text = "mission success!";
} 

运行示意图:

ScreenShot_2025-11-07_152259_155 222

posted @ 2025-11-07 15:24  Tlink  阅读(9)  评论(0)    收藏  举报