Multithreading 如何使用侦听和发送数据的进程设计多线程.NET应用程序?
我正在尝试设计一个多线程的.NET应用程序,它可以同时执行多个进程。我没有使用多线程应用程序的经验,过去几天我一直在阅读它。这是我需要做的。我将有两个进程在某个时间间隔“侦听”UDP广播数据。然后我将有第三个进程,在某个时间间隔发送最新的数据。现在我正在构建一个概念验证应用程序。我正在将其构建为一个C#WinForms应用程序。我的想法是使用一个类实例来保存最新的数据,并使用锁定来确保没有任何问题 我的申请很有效。它似乎运行了大约60秒,然后就停止工作了。它并不是真的因为一个错误或任何事情而失败。有时它似乎只是停止发送。其他时候,应用程序将在没有任何错误的情况下关闭。让我觉得我遇到了多线程同步问题或其他问题 下面是一些简化的代码:Multithreading 如何使用侦听和发送数据的进程设计多线程.NET应用程序?,multithreading,c#-4.0,Multithreading,C# 4.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),不如从不同的线程在文件系统上读/写一个文件
谢谢,
科里
编辑:我省略了启动线程的代码。1。使用任务而不是线程。2.您是否将数据绑定到任何控件?如果是这样,这将不起作用,因为UI是从另一个线程更新的。不,我没有将任何数据绑定到应用程序中的任何控件。另外,你知道我在哪里可以学到更多关于任务的知识吗?我在谷歌上搜索了一下,但是我找不到一个好的教程来解释任务。比如在这里搜索“TPL”,好吧,我读了一些关于TPL的文章。那有点帮助。但我仍然找不到任何具体的例子。我想知道如何编写3个长时间运行的方法,这些方法将同时运行,并且都需要修改共享对象。请将代码更改为tasks,并编写完整代码,而不仅仅是psuedo代码。