1

我已经检查了这个问题:Codeplex NDde Server how to send multiple items,以及这个Alternative Of client.Advise += OnAdvise; 在处理这个问题时,在 vb.net NDDE和许多其他来源中;但是,似乎要么我不了解一些基础知识,要么我一直在尝试这样做的方式没有明确支持它。

我正在努力编写一个类库,它将一些值(大约六个)发送到一个最好使用 DDE 输入的应用程序,一次几个。

令我困惑的是,我是否需要做这样的事情,才能通过热链接发送我的物品

        public AutoServer(string service, string ItemDataLabel)
            : base(service)
        {
            // Create a timer that will be used to advise clients of new data.
            _Timer.Elapsed += this.OnTimerElapsed;
            _Timer.Interval = 30;
            _Timer.SynchronizingObject = this.Context;

            DataLabel = ItemDataLabel;
            //OnAdvise(Symbol, DataLabel, 1);
        }



        private void OnTimerElapsed(object sender, ElapsedEventArgs args)
        {
            // Advise all topic name and item name pairs.

            OnAdvise(Current, DataLabel, 1);

            Advise(Current, DataLabel);
        }


        public string Data;
        public string DataLabel;

}

并以这种方式将几个带有不同字符串标签的 OnAdvise 放在那里,写出 OnAdvise 在 OnAdvice 本身内部的每个标签组合的情况下应该做什么?

另一个选项似乎注册了几个服务器实例,并在 OnAdvice 中写出每种参数组合情况的所有详细信息。但最困难的来了。我尝试了这两种方法,但我收到异常消息:在创建窗口句柄之前,无法在控件上调用 Invoke 或 BeginInvoke。换句话说,我需要为每个服务器分别为每个项目提供一个上下文(所有具有多个 OnAdvices 的东西似乎都不起作用)。

那么将表单和上下文初始化放在一个单独的方法中是否正确?

例如:

namespace lookout_DDE
{
    public partial class lookout_DDE_class : AutoGroup
    {


        public partial class ServerContextForm : Form
        {
            private DdeContext context = null;

            private void ContextRunner()
            {
                context = new DdeContext(this);
                context.Initialize();
            }             
        }
    }
}

namespace lookout_DDE
{
    public partial class lookout_DDE_class : AutoGroup
    {
        public partial class ServerContextForm : Form
        {
            public ServerContextForm()
            {
                InitializeComponent();
                ContextRunner();
            }
        }
    }
}

        [STAThread]
        partial void RunServer()
        {

            using (ServerContextForm ContextForm = new ServerContextForm())
            {
                Application.Run(ContextForm);
                ServerStarter("A1");
            }
            using (ServerContextForm ContextForm = new ServerContextForm())
            {
                Application.Run(ContextForm);

                ServerStarter("A2");
            }
            using (ServerContextForm ContextForm = new ServerContextForm())
            {
                Application.Run(ContextForm);

                ServerStarter("A3");
            }
            using (ServerContextForm ContextForm = new ServerContextForm())
            {
                Application.Run(ContextForm);

                ServerStarter("A4");
            }
            using (ServerContextForm ContextForm = new ServerContextForm())
            {
                Application.Run(ContextForm);

                ServerStarter("A5");
            }
}

刚刚发现我必须保留表单才能运行上下文,因此需要使用单独的方法而不是使用单独的方法。

所以也许重申这个问题的最好方法是,我是否需要使用带有上下文的多个表单和注册的服务器实例,以便运行多个项目,或者我应该以某种方式在 Server 类中实现 OnAdvice?

看,我是 C# 和一般编程的新手,但是,我正在尝试“在这个过程中”学习编程。如果你能帮上忙,请指教。:)

4

1 回答 1

0

直到现在想出了部分解决方案:1)需要有多个Server实例,因为OnAdvice可以被客户端应用程序订阅一次。(如果您没有编写它,谁知道它是如何做到的) 2)每个服务器都可能需要一个单独的(首选)上下文,并且分别需要一个表单,但是可能有一个单独的上下文。最后一个没测试。

现在,我想起了一个关于“潜在”这个词的坏/好笑话。你猜怎么着。可惜一点意见都没有!

于 2017-08-16T16:41:22.907 回答