Я программирую под Delphi Prism для Mono. Я продолжаю получать эту ошибку «Не удается получить доступ к удаленному объекту» после открытия уже открытой и закрытой оконной формы, даже если оконная форма объявлена внутри класса и создана в конструкторе следующим образом.
Вот класс, в котором он объявлен:
MainForm = partial class(System.Windows.Forms.Form)
private
method SignalBtn_Click(sender: System.Object; e: System.EventArgs);
method CommBtn_Click(sender: System.Object; e: System.EventArgs);
method button1_Click(sender: System.Object; e: System.EventArgs);
method button2_Click(sender: System.Object; e: System.EventArgs);
method button4_Click(sender: System.Object; e: System.EventArgs);
method button5_Click(sender: System.Object; e: System.EventArgs);
method MainForm_Load(sender: System.Object; e: System.EventArgs);
method ShutdownBtn_Click(sender: System.Object; e: System.EventArgs);
method MySerialData(sender: System.Object; e:SerialDataReceivedEventArgs);
method LoginBtn_Click(sender: System.Object; e: System.EventArgs);
protected
method Dispose(disposing: Boolean); override;
public
RX:Array[0..5] of byte;
TX:Array[0..6] of byte;
serialPort1:System.IO.Ports.SerialPort;
thr:Thread;
stoploop:Boolean;
mcommand:Byte;
thechannel:Integer;
fr : UnitForm; <<<<<<<<<<<< Here is the form being declared.
constructor;
method FillTable;
method mythread;
end;
Вот конструктор, в котором он создан или создан:
constructor MainForm;
begin
//
// Required for Windows Form Designer support
//
InitializeComponent();
mcommand:=$AA;
thechannel:=$01;
stoploop:=false;
thr:=nil;
fr := new UnitForm; <<<<<<<<<<<<<<<<<< fr is created as new.
//
// TODO: Add any constructor code after InitializeComponent call
//
end;
Вот как форма отображается или открывается внутри события кнопки:
method MainForm.UnitBtn_Click(sender: System.Object; e: System.EventArgs);
begin
fr.Show;
end;
Поскольку fr является оконной формой, которая является частью класса, очень похожа на глобальную переменную, почему оконная форма располагается, когда вы закрываете ее после открытия. Разве он не сохраняется в памяти до тех пор, пока вся программа не будет закрыта для легкого доступа?
UPDATE:
Внутри onFormClosing я скрываю форму, и она, кажется, работает, но когда я пытаюсь снова открыть форму, она вызывает то же исключение, что и раньше: «Не удается получить доступ к удаленному объекту».
method UnitForm.UnitForm_FormClosing(sender: System.Object; e: System.Windows.Forms.FormClosingEventArgs);
begin
hide;
end;