Похоже, у вас есть проблемы с защитой / продолжительностью жизни.Форма создает theDdeServer, а затем theDdeServer создает другой экземпляр главной формы (но никогда не показывает его).Это не выглядит правильно.Возможно, вы захотите передать форму на сервер при создании
Но наиболее вероятной причиной является то, что форма создает theDdeServer, а затем немедленно удаляет его:
public void runDDEServer()
{
try
{
using (DdeServer server = new theDDEServer("dde_server"))
{
server.Register();
}
}
catch (Exception ex)
{
}
}
На закрывающей скобкеБлок using
.Net уничтожит ваш сервер.Вы не хотите использовать using
здесь.Вместо этого вы хотите, чтобы форма удерживалась на сервере ... и затем избавлялась от нее , когда форма удаляется .Что-то вроде:
public partial class DDEServer_MainForm : Form
{
DdeServer server;
/* snipped out code */
public void runDDEServer()
{
try
{
server = new theDDEServer("dde_server", this);
server.Register();
}
catch (Exception ex)
{
//--> you should definitely do something here. Print a message at least!
}
}
/* snipped out code */
//--> In the form designer, hook this method to the OnClosing event!
private void closeForm(object sender, System.ComponentModel.CancelEventArgs e)
{
server.Unregister();
server.Dispose();
}
}
А затем в DdeServer примите форму в качестве аргумента конструктора:
public sealed class theDDEServer : DdeServer
{
DDEServer_MainForm mainForm;
System.Timers.Timer _Timer = new System.Timers.Timer();
public theDDEServer(string service, Form mainForm) : base(service)
{
DDEServer_MainForm = mainForm;
_Timer.Elapsed += this.OnTimerElapsed;
_Timer.Interval = 1000;
_Timer.SynchronizingObject = this.Context;
}
/* snipped out code */
public override void Unregister()
{
DDEServer_MainForm = null;
_Timer.Stop();
base.Unregister();
}
/* snipped out code */
}