Зависание при инициализации компонент
От: VictorC  
Дата: 22.04.10 09:12
Оценка:
Использую NET CF 2.0, C#, Visual Studio 2005, Windows Mobile 5.0(или 6.1) .
При запуске программы на КПК инициализирую формы (компоненты на форме), чтобы в дальнейшем они быстро открывались. На КПК — достаточно свободной памяти для выполнения этой операции
Примерно в 10%-20% случаев первоначальной инициализации этих форм при запуске программы — программа зависает, то есть перестают обрабатываться (показываться окна) в главной форме, откуда я инициализирую другие формы.

Помогите разобраться. Проблема явно не в какой-то конкретной форме. Если ее забираю из инициализации, то виснет на какой-то другой и как я уже писал — не всегда.

Фрагменты кода

MainForm.cs


void InitializeAsync()//главная процедура инициализации
{
    //...тут также инициализируется несколько форм
    Classes.Loader.Instance.SetSubCaption("Форма 'Настройки 1'...");//данное сообщение показывается всегда             
    this.InitializeSyncForm(Forms.Forms.MessageBoxEx);
    Classes.Loader.Instance.SetSubCaption("Форма 'Настройки 2'...");//данное сообщение в 10-20% случаев инициализации не показывается
    this.InitializeSyncForm(Forms.Forms.MessageBoxEx2);
    //...тут также инициализируется несколько форм
}
 
        Form CreateFormByType(Forms.Forms form)//вызов инициализации формы
        {
            switch (form)
            {
                case Forms.Forms.MessageBoxEx: return MessageBoxEx.Instance;
                case Forms.Forms.MessageBoxEx2: return MessageBoxEx2.Instance;
            }
            return null;
        }
 
        void InitializeSyncForm(Forms.Forms value)
        {
            if (this.InvokeRequired)
            {
                this.Invoke
                    (
                    new MethodDelegate<Forms.Forms>(InitializeSyncForm),
                    new object[] { value }
                    );               
                return;
            }
            if (_forms == null)
                _forms = new Dictionary<Forms.Forms, Form>();
            this._forms.Add(value, CreateFormByType(value));
        }

MessageBoxEx.cs

private MessageBoxEx()
{           
    InitializeComponent();  
}
 
public static MessageBoxEx Instance
{
    get
    {
        if (_instance == null)
            _instance = new MessageBoxEx();
        return _instance;
    }
}


MessageBoxEx.Designer.cs

private void InitializeComponent()
        {
            this.mainMenu1 = new System.Windows.Forms.MainMenu();
            this.panel1 = new System.Windows.Forms.Panel();
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.button3 = new System.Windows.Forms.Button();
            this.button4 = new System.Windows.Forms.Button();
            this.button5 = new System.Windows.Forms.Button();
            this.panel1.SuspendLayout();
            this.SuspendLayout();
            // 
            // panel1
            // 
            this.panel1.BackColor = System.Drawing.SystemColors.ActiveCaption;
            this.panel1.Controls.Add(this.label1);
            this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
            this.panel1.Location = new System.Drawing.Point(0, 0);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(236, 21);
            // 
            // label1
            // 
            this.label1.BackColor = System.Drawing.SystemColors.ActiveCaption;
            this.label1.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold);
            this.label1.ForeColor = System.Drawing.SystemColors.ActiveCaptionText;
            this.label1.Location = new System.Drawing.Point(2, 3);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(100, 20);
            this.label1.Text = "Обновление";
            // 
            // label2
            // 
            this.label2.ForeColor = System.Drawing.SystemColors.WindowText;
            this.label2.Location = new System.Drawing.Point(14, 24);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(208, 52);
            this.label2.Text = "Обновление";
            // 
            // button1
            // 
            this.button1.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold);
            this.button1.Location = new System.Drawing.Point(3, 79);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(72, 20);
            this.button1.TabIndex = 2;
            this.button1.Text = "Да";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold);
            this.button2.Location = new System.Drawing.Point(24, 105);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(87, 20);
            this.button2.TabIndex = 2;
            this.button2.Text = "Да для всех";
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // button3
            // 
            this.button3.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold);
            this.button3.Location = new System.Drawing.Point(81, 79);
            this.button3.Name = "button3";
            this.button3.Size = new System.Drawing.Size(72, 20);
            this.button3.TabIndex = 2;
            this.button3.Text = "Нет";
            this.button3.Click += new System.EventHandler(this.button3_Click);
            // 
            // button4
            // 
            this.button4.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold);
            this.button4.Location = new System.Drawing.Point(159, 79);
            this.button4.Name = "button4";
            this.button4.Size = new System.Drawing.Size(72, 20);
            this.button4.TabIndex = 2;
            this.button4.Text = "Отмена";
            this.button4.Click += new System.EventHandler(this.button4_Click);
            // 
            // button5
            // 
            this.button5.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold);
            this.button5.Location = new System.Drawing.Point(117, 105);
            this.button5.Name = "button5";
            this.button5.Size = new System.Drawing.Size(87, 20);
            this.button5.TabIndex = 2;
            this.button5.Text = "Нет для всех";
            this.button5.Click += new System.EventHandler(this.button5_Click);
            // 
            // MessageBoxEx
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
            this.AutoScroll = true;
            this.ClientSize = new System.Drawing.Size(236, 134);
            this.ControlBox = false;
            this.Controls.Add(this.button5);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button4);
            this.Controls.Add(this.button3);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.panel1);
            this.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Regular);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Menu = this.mainMenu1;
            this.Name = "MessageBoxEx";
            this.TopMost = true;
            this.panel1.ResumeLayout(false);
            this.ResumeLayout(false);

        }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.