C#WPF实时UDP消息

时间:2016-10-04 10:47:10

标签: c# wpf udp

我真的很喜欢使用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; }
    }

}

1 个答案:

答案 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并举起活动。