0

我正在尝试设计一个可以同时执行多个进程的多线程 .NET 应用程序。我没有使用多线程应用程序的经验,最近几天一直在阅读它。这是我需要做的。我将有两个进程在某个时间间隔内“监听”UDP 广播数据。然后我将有第三个进程在某个时间间隔发送最新数据。现在我正在构建一个概念验证应用程序。我将其构建为 C# WinForms 应用程序。我的想法是有一个类实例,我将使用它来保存最新数据,并且我将使用锁定来确保我没有任何问题。

我的应用程序类型的作品。它似乎运行了大约 60 秒左右,然后它就停止了工作。它并没有因为错误或任何东西而真正失败。有时它似乎只是停止发送。其他时候,应用程序将关闭而没有任何错误。让我觉得我遇到了多线程同步问题或其他问题。

这是一些简化的代码:

public class MyData
{
  public string Field1 {get; set;}
  public string Field2 {get; set;}
}

public class myForm : Form
{
  private MyData _data = new MyData();
  readonly object _locker = new object();
  Thread _thread1;
  Thread _thread2;
  Thread _thread3;

  public myForm()
  {
    _thread1 = new Thread(new ThreadStart(Listener1));
    _thread2 = new Thread(new ThreadStart(Listener2));
    _thread3 = new Thread(new ThreadStart(Sender));

    _thread1.Start();
    _thread2.Start();
    _thread3.Start();
  }

  private void Listener1()
  {
    bool _done = false;
    while (!_done)
    {
      ...listen and get data...
      lock(_locker)
      {
        _data.Field1 = ...value...
      }
    }
  }

  private void Listener2()
  {
    bool _done = false;
    while (!_done)
    {
      ...listen and get data...
      lock(_locker)
      {
        _data.Field2 = ...value...
      }
    }
  }

  private void Sender()
  {
    string _dataToSend = "";
    bool _done = false;
    while(!_done)
    {
      Thread.Sleep(2000);
      lock(_locker)
      {
        _dataToSend = _data.Field1 + "," + _data.Field2;
      }
    }
    ...send _dataToSend...
  }
}

有没有人对我可能做错了什么有任何想法?这个概念看起来正确吗?有没有更好的方法可以完成同样的事情?而不是使用类变量来保存数据(MyData),如果我只是从不同的线程读取/写入文件系统上的文件会更好吗?

谢谢,科里

编辑:我遗漏了启动线程的代码。

4

0 回答 0