Ajit Kumar Pandit Ответов: 1

Почему он говорит, что программа имеет более одной точки входа, определенной, следовательно, компилируется с помощью /main, чтобы разнести тип, содержащий точку входа?


Как мы знаем, VS автоматически создает основную функцию в классе app.g.cs для оконного приложения wpf. У меня так. Теперь я собираюсь определить свою собственную основную функцию в другом классе и удалить точку входа по умолчанию из файла класса app.g.cs. У меня есть сборка и все еще ошибка, показывающая, что у вас есть две точки входа. Когда я собираюсь перестроить решение, основная функция (точка входа по умолчанию) автоматически создается в классе app.g.cs. Что мне нужно сделать, чтобы остановить автоматическое воссоздание основной функции (точки входа по умолчанию) в файле app.g.cs?

Что я уже пробовал:

Я пытаюсь решить эту проблему.
----------------------------------------------
Основная функция, которая определена в другом классе
SingleInstanceManager.cs as 
  class SingleInstanceManager : WindowsFormsApplicationBase
    {

        public SingleInstanceManager()
        {
            this.IsSingleInstance = true;
            //System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon();
            //System.Windows.Forms.NotifyIcon ni1 = new System.Windows.Forms.NotifyIcon();


            //ni1.Icon = Properties.Resources.favicon;
            ////Taskba.OverlayIcon = new Icon(SystemIcons.Error, 16, 16);

            //ni1.Text = "IP Messenger";

            //ni1.Visible = true;


            //    ni.DoubleClick +=
            //delegate(object sender, EventArgs args)
            //{

            //    MainWindow m = new MainWindow();


            //    this.Show();
            //    this.WindowState = WindowState.Normal;
            //};
        }

        protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs eventArgs)
        {
            base.OnStartup(eventArgs);
            App app = new App();
            app.Run(new Selectlanguage("0"));
            return false;
        }

        protected override void OnStartupNextInstance(
           StartupNextInstanceEventArgs eventArgs)
        {
            base.OnStartupNextInstance(eventArgs);
            Window mainWindow = System.Windows.Application.Current.MainWindow;
            if (mainWindow.WindowState != WindowState.Normal)
            {
                mainWindow.WindowState = WindowState.Normal;
            }
            System.Windows.Application.Current.MainWindow.Activate();
        }

        [STAThread]
        public static void Main(string[] args)
        {
            SingleInstanceManager manager = new SingleInstanceManager();
            manager.Run(args);
        }


    }
------------------------------------
I have removed default entry point from app.g.cs class file and put following code:
/// <summary>
    /// App
    /// 
    public partial class App : System.Windows.Application, System.Windows.Markup.IComponentConnector
    {
        private bool _contentLoaded;
        /// <summary>
        /// InitializeComponent
        /// 
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
        public void InitializeComponent()
        {

            if (_contentLoaded)
            {
                return;
            }
            _contentLoaded = true;

            #line 4 "..\..\App.xaml"
            this.StartupUri = new System.Uri("Selectlanguage.xaml", System.UriKind.Relative);

            #line default
            #line hidden
            //  System.Uri resourceLocater = new System.Uri("/IDSCANNER;component/app.xaml", System.UriKind.Relative);

            #line 1 "..\..\App.xaml"
            //System.Windows.Application.LoadComponent(this, resourceLocater);

            #line default
            #line hidden
        }

        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target)
        {
            this._contentLoaded = true;
        }
    }

Jochen Arndt

Просто Google для "основной точки входа wpf":
- Измените "Startup object" на класс, содержащий ваш метод Main()
- Отключить автоматическое создание приложения.г. CS в методе Main()

[no name]

Это говорит о том, что вы просто слепо копируете/вставляете код, который вы не понимаете, в свое приложение, надеясь, что оно будет работать.

Ajit Kumar Pandit

Спасибо за ваше величие. Да, твой ответ помогает мне больше. Спасибо.

1 Ответов

Рейтинг:
12

Graeme_Grant

Точка входа по умолчанию находится в файле app. xaml

<Application x:Class="WpfOptionList.App"

             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

             xmlns:local="clr-namespace:WpfOptionList"

             StartupUri="MainWindow.xaml">
    <Application.Resources>
         
    </Application.Resources>
</Application>

Удалите эту строку:
StartupUri="MainWindow.xaml"

Теперь перейдите в раздел "Свойства приложения" и укажите свой метод начальной загрузки.Это немного сложнее, поэтому вам нужно будет провести еще несколько исследований (поиск в google), чтобы сделать это правильно.