我正在尝试做什么,当我们点击radform1(Parent)中的按钮时,隐藏radform1然后更新Form1(子窗体)中的text / label / radgrid标题文本值, 一旦我们关闭Form1(子表单)..也关闭radform1(Parent)。
我收到一条错误消息:Invalid OPeration Exception was Un-Handled
跨线程操作无效
控件'radPageView1已经从创建它的线程以外的线程访问。
我如何使用invoke或action方法来解决这个问题?我无法完全理解这个概念..请向我解释我该怎么办...感谢任何帮助!
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();
}
答案 0 :(得分: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();});
通过这种方式,您可以确保该操作将在正确的线程内执行。
希望这有帮助。