Если какая-либо форма окна (дочерняя форма) была открыта из нового потока Главного окна (родительская форма), то невозможно удерживать подокно в центре главного окна, поэтому нам нужно зафиксировать положение подокна окно вручную с помощью координат X и Y.
В свойствах подокна измените «StartPosition» на «Manual»
код в главном окне
private void SomeFunction()
{
Thread m_Thread = new Thread(LoadingUIForm);
m_Thread.Start();
OtherParallelFunction();
m_Thread.Abort();
}
private void LoadingUIForm()
{
m_LoadingWindow = new LoadingForm(this);
m_LoadingWindow.ShowDialog();
}
код в подокне для определения собственной позиции с помощью родительской текущей позиции, а также размера
public LoadingForm(Control m_Parent)
{
InitializeComponent();
this.Location = new Point( m_Parent.Location.X+(m_Parent.Size.Width/2)-(this.Size.Width/2),
m_Parent.Location.Y+(m_Parent.Size.Height/2)-(this.Size.Height/2)
);
}
Здесь вычисляются координаты центра родителя, а подокно сохраняется точно в центре родителя путем вычисления его собственного центра с помощью (this.height / 2) и (this.width / 2) this Эта функция может быть использована для родительских перемещенных событий.