C# make Out-of-Process COM exe с пользовательским интерфейсом, как позволить ему автоматически отображаться перед вызовом метода?
У меня есть успех сделать исполняемый COM-EXE, и пусть у него есть объект, который вызывается другим процессом, успешно... см. Ниже клиентский код..
private void button1_Click(object sender, EventArgs e)
{
WindowsFormsApplication1.Calculator CALC = new WindowsFormsApplication1.Calculator();
int i= CALC.Add(12, 3);
button1.Text = i.ToString();
}
но мой вопрос заключается в том, почему основная форма exe-сервера, которая не была автоматически обнаружена первой перед этим вызовом...??
ниже код моего сервера:
static class Program
{
/// <summary>
///
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var regServices = new RegistrationServices();
int cookie = regServices.RegisterTypeForComClients(
typeof(Calculator),
RegistrationClassContext.LocalServer | RegistrationClassContext.RemoteServer,
RegistrationConnectionType.SingleUse);
Application.Run(new Form1());
// regServices.UnregisterTypeForComClients(cookie);
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// Calculator.ptrF = this;
}
private void button1_Click(object sender, EventArgs e)
{
this.Show();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// Calculator.ptrF = null;
}
}
[ComVisible(true)]
public interface ICalculator
{
int Add(int x, int y);
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class Calculator : ICalculator
{
// public static Form1 ptrF;
public int Add(int x, int y) {
// if (ptrF != null)
// {
// ptrF.Show();
//
// }else {
// ptrF = new Form1();
// ptrF.Show();
// }
return x + y;
}
}
Для решения проблемы, когда форма не отображается во время / перед вызовом метода, я добавляю некоторый код в качестве верхнего комментария, это сработало... но я все еще думаю, что это не изящный метод... Кто-нибудь может мне помочь улучшить его??