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;
            }
        }

Для решения проблемы, когда форма не отображается во время / перед вызовом метода, я добавляю некоторый код в качестве верхнего комментария, это сработало... но я все еще думаю, что это не изящный метод... Кто-нибудь может мне помочь улучшить его??

0 ответов

Другие вопросы по тегам