NDde Server и Context для нескольких тем и предметов. Нужно ли мне несколько экземпляров?
Я проверил этот вопрос: Codeplex NDde Server, как отправить несколько элементов, и эта альтернатива 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;
}
и поместить туда таким образом несколько OnAdvises с разными строковыми метками, записав, что On Advise должен делать в случае с каждой комбинацией меток, внутри самого 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");
}
}
Просто подумал, что я должен оставить формы для запуска контекстов, поэтому вместо использования \ отдельных \ методов будет необходимо.
Поэтому, возможно, лучший способ переформулировать вопрос заключается в том, нужно ли мне использовать несколько форм с контекстами и зарегистрированными экземплярами сервера, чтобы запустить несколько элементов, или каким-то образом мне следует реализовать OnAdvice внутри класса Server?
Видите, я новичок в C# и программировании в целом, однако я пытаюсь изучать программирование "в процессе". Если вы можете помочь, пожалуйста, совет.:)
1 ответ
До сих пор разобрались с частичным решением: 1) Должно быть несколько экземпляров Сервера, потому что OnAdvice может быть подписан один раз клиентским приложением. (И кто знает, как это происходит, если вы не написали это) 2) Каждому Серверу может потребоваться отдельный (предпочтительный) контекст и, соответственно, форма, однако потенциально может быть один контекст. Не проверял последний.
Теперь я вспомнил плохую / хорошую шутку о слове "потенциально". Угадай, что. И как жаль, что у меня вообще нет мнений!