Дочерняя форма невидимого родителя никогда не показывается? - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть основная форма, которая невидима и в какой-то момент создает дочернюю форму.Эта дочерняя форма выглядит следующим образом в designer.cs:

        this.listBox1 = new System.Windows.Forms.ListBox();
        this.SuspendLayout();
        // 
        // listBox1
        // 
        this.listBox1.FormattingEnabled = true;
        //this.listBox1.Location = new System.Drawing.Point(0, 0);
        this.listBox1.Name = "listBox1";
        this.listBox1.Size = new System.Drawing.Size(255, 147);
        this.listBox1.TabIndex = 0;
        // 
        // Form2
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.AutoSize = true;
        this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
        this.ClientSize = new System.Drawing.Size(502, 384);
        this.ControlBox = false;
        this.Controls.Add(this.listBox1);
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        this.Name = "Form2";
        this.Text = "Form2";

, а в основной форме я создаю форму Form2 следующим образом:

    Form2 a = new Form2(new Point(0, Screen.PrimaryScreen.WorkingArea.Height / 2)); //This is the location
                        Thread thtt = new Thread((ThreadStart)delegate()
                            {
                                a.CreateControl();
                                a.Show();
                                TimeSpan slept = TimeSpan.Zero;
                                while (!a.Created && slept < TimeSpan.FromMilliseconds(2000))
                                {
                                    Thread.Sleep(99);
                                    slept += TimeSpan.FromMilliseconds(99);
                                }
                                if (!a.Created)
                                {
                                    MessageBox.Show("after 2 sec no creation?");
                                    System.Diagnostics.Debugger.Break();
                                }
                                else
                                {
                                    //a.Show();
                                    a.Invoke((MethodInvoker)delegate()
                                    {

                                        a.TopMost = true;
                                        a.Location = new Point(0, Screen.PrimaryScreen.WorkingArea.Height / 2);
                                        Cursor.Position = new Point(a.Location.X + 10, a.Location.Y + 10);
                                        a.AddAndAct(minimized);

                                    });
                                }
                                aa = a;
                            });
                        thtt.IsBackground = true;
                        thtt.Start();

Проблема, с которой я сталкиваюсь, заключается в, что Form2 на самом деле мигает, но затем волшебным образом исчезает.Любые предложения оценены.

Спасибо за совет, Алекс

1 Ответ

1 голос
/ 19 апреля 2011

Алекс - я думаю, что это ваша проблема:

Как создать форму в своем собственном потоке и держать ее открытой в течение всего времени жизни приложения

Принято:очень верно, потому что я использую это в своих приложениях, и забыл об этом.=)

"Вам потребуется запустить цикл обработки сообщений во вновь созданном потоке. Вы можете сделать это, вызвав Application.Run (form)."

...