我真的很喜欢使用WPF的C#,我正在尝试编写一个显示实时UDP消息的程序(基本上只是一个值),但我不能将UDP监听代码与我的c#代码合并WPF,如果我像我一样使用UDP监听功能,它没有弹出窗口,任何想法怎么做?真的很感激!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
//UDP
using System.Net;
using System.Net.Sockets;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
string Rawdata_str1 = "0";
public MainWindow()
{
InitializeComponent();
UDP_listening_PI1();
X_values.DataContext = new X_Y() { X = Rawdata_str1 };
Y_values.DataContext = new X_Y() { Y = Rawdata_str1 };
}
public void UDP_listening_PI1()
{
UdpClient listener = new UdpClient(48911);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, (48911));
bool done = false;
try
{
while (!done)
{
byte[] pdata = listener.Receive(ref groupEP);
string price = Encoding.ASCII.GetString(pdata);
int Rawdata1 = int.Parse(price);
Rawdata_str1 = Rawdata1.ToString();
}
}
finally
{
listener.Close();
}
}
}
public class X_Y
{
public string X { get; set; }
public string Y { get; set; }
}
}
答案 0 :(得分:0)
您正在侦听主UI线程中的UDP端口,
这就是为什么你在拨打电话时没有看到主窗口的原因
因为{0}}方法阻止了UI线程上的控制流。
您需要在不同的后台线程中侦听UDP端口,然后在需要时将消息泵回主UI线程。
您可能需要以下内容。
UDP_listening_PI1
当您将值设置为X&amp;时,您还需要提升 private readonly Dispatcher _uiDispatcher;
public MainWindow()
{
InitializeComponent();
_uiDispatcher = Dispatcher.CurrentDispatcher;
var dataContext = new X_Y();
X_values.DataContext = dataContext;
Y_values.DataContext = dataContext;
Task.Factory.StartNew(UDP_listening_PI1);
}
public void UDP_listening_PI1()
{
UdpClient listener = new UdpClient(48911);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, (48911));
bool done = false;
try
{
while (!done)
{
byte[] pdata = listener.Receive(ref groupEP);
string price = Encoding.ASCII.GetString(pdata);
int Rawdata1 = int.Parse(price);
Rawdata_str1 = Rawdata1.ToString();
UpdateXY(Rawdata_str1);
}
}
finally
{
listener.Close();
}
}
private void UpdateXY(string rawData)
{
if (!_uiDispatcher.CheckAccess())
{
_uiDispatcher.BeginInvoke(DispatcherPriority.Normal, () => { UpdateXY(rawData); });
return;
}
dataContext.X = rawData;
dataContext.Y = rawData;
//Need to raise property changed event.
}
。 Y. Modidy X&amp;的制定者Y并举起活动。