0

我想要做的是,当我们单击 radform1(父)中的按钮时,隐藏 radform1 然后更新 Form1(子表单)中的文本/标签/radgrid 标题文本值,一旦我们关闭 Form1(子表单)..关闭 radform1(Parent) 为好。

我收到一条错误消息:Invalid OPeration Exception was Un-Handled跨线程操作无效 Control 'radPageView1 已从创建它的线程以外的线程访问。

如何使用调用或操作方法来解决此问题?我无法完全理解这个概念..请向我解释我应该在这里做什么...感谢任何帮助!

Form1 frm = new Form1();
        private void radButton1_Click(object sender, EventArgs e) // French Version Button
        {
            timer1.Enabled = true;
            radProgressBar1.Visible = true;
            frm.radGridView1.Columns[0].HeaderText = "Test"; // Change the Radgrid Header Text at Col[0]

        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            ticks++;
            radProgressBar1.Value1 = ticks;
            if (ticks != 100) return;
            timer1.Enabled = false;
            ticks = 0;

            frm.FormClosed += (_, args) => frm.Close();
            frm.Hide();
            frm.Show();

        }
4

1 回答 1

1

我不知道我是否理解得很好,但我认为你需要这样的东西:

public static void InvokeIfRequired(this Form c, Action<Form> action)
        {
            if (c.InvokeRequired)
            {
                try { c.Invoke(new Action(() => action(c))); }
                catch { }
            }
            else
            {
                action(c);
            }
        }

并打电话

frm.InvokeIfRequired((_)=>{frm.ChangeSomethingInTheUI();});

通过这种方式,您可以确定该操作将在正确的线程内执行。

希望这可以帮助。

于 2012-11-14T12:42:27.297 回答