我正在尝试设计一个可以同时执行多个进程的多线程 .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),如果我只是从不同的线程读取/写入文件系统上的文件会更好吗?
谢谢,科里
编辑:我遗漏了启动线程的代码。