繁体   English   中英

C#-将项目从类添加到表单上的列表框

[英]C# - Add Item to Listbox on Form from a Class

我正在尝试用C#做一个简单的WebSocket服务器,它将与JavaScript中的客户端通信,我正在测试的代码是这样的:

Websocket锋利服务器

using System;
using System.Windows.Forms;
using WebSocketSharp;
using WebSocketSharp.Server;

namespace MyProgram
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var wssv = new WebSocketServer(8081);

            wssv.WaitTime = TimeSpan.FromSeconds(3);

            wssv.AddWebSocketService<NFP>("/");

            wssv.Start();
        }
    }

    public class NFP : WebSocketBehavior
    {
        protected override void OnMessage(MessageEventArgs e)
        {
            Console.WriteLine(e.Data);

            Send("Received");
        }

        protected override void OnError(ErrorEventArgs e)
        {
            //Console.WriteLine(e.Exception);
        }

        protected override void OnClose(CloseEventArgs e)
        {
            //Console.WriteLine(e.Code);
        }
    }
}

现在我在想,如何发送已在Form1上打开的ListBox在OnMessage上收到的消息?

  1. 将目标列表框定义为NPF类的属性:

    public ListBox Target {get; set;}

  2. 在您的button1_Click方法中设置目标:

    wssv.Target = myListBox;

  3. 收到消息后,将其添加到列表框中。 但是,由于您与UI线程不在同一线程中(这是唯一可以修改Form上的控件的线程),因此您必须在TargetInvoke成员才能完成工作:

     protected override void OnMessage(MessageEventArgs e) { Console.WriteLine(e.Data); if (Target != null) Target.Invoke( () => {Target.Items.Add(e.Message);}); Send("Received"); } 

更好的解决方案是在c#中使用Binding

但是,如果您需要快速的解决方案,则可以创建此类:

public static class ListBoxAdder
{
    public static void Add(ListBox listbox, string newItem)
    {
        listbox.Items.Add(newItem);
    }
}

在Form1中声明

public static ListBox listBox;

最后

protected override void OnMessage(MessageEventArgs e)
{
  ListBoxAdder.Add(Form1.listBox, e.Data);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM