InvokeRequired 复选框
InvokeRequired to checkbox
我只需要为复选框创建一个函数,它将 return 复选框的当前值。
我写道:
private void Checkbox_check()
{
if (checkBox1.InvokeRequired)
return (int)checkBox1.Invoke(new Func<int>(checked));
else
return checkBox1.Checked; // bad here i know
}
这里有什么问题,有人可以正确地编写这个函数吗?我需要调用,因为如果不调用就不能在另一个线程中使用。我只是搜索有关帮助的论坛和网络,但无法在任何地方找到解决方案。
你应该这样写:
private void Checkbox_check()
{
if (checkBox1.Invoke:DRequired)
return (int)checkBox1.Invoke(new Func<int>(checked));
else
return checkBox1.Checked.(initInvoke);
}
不要使用 Func<>
,因为它不会 return 任何东西。请改用 Action
。
private void Checkbox_check()
{
if (checkBox1.InvokeRequired)
checkBox1.Invoke(new Action(Checkbox_check));
else
{
// do what you like to do on the ui context
// checkBox1.Checked; // bad here i know, yep...
}
}
从另一个线程获取选中状态,你可以这样做:
private bool Checkbox_check()
{
// result value.
bool result = false;
// define a function which assigns the checkbox checked state to the result
var checkCheckBox = new Action(() => result = checkBox1.Checked);
// check if it should be invoked.
if (checkBox1.InvokeRequired)
checkBox1.Invoke(checkCheckBox);
else
checkCheckBox();
// return the result.
return result;
}
我不建议这样做,这可能会导致死锁等。我建议您在线程启动时传递检查的值,这样您就不必进行任何跨线程调用。
我只需要为复选框创建一个函数,它将 return 复选框的当前值。
我写道:
private void Checkbox_check()
{
if (checkBox1.InvokeRequired)
return (int)checkBox1.Invoke(new Func<int>(checked));
else
return checkBox1.Checked; // bad here i know
}
这里有什么问题,有人可以正确地编写这个函数吗?我需要调用,因为如果不调用就不能在另一个线程中使用。我只是搜索有关帮助的论坛和网络,但无法在任何地方找到解决方案。
你应该这样写:
private void Checkbox_check()
{
if (checkBox1.Invoke:DRequired)
return (int)checkBox1.Invoke(new Func<int>(checked));
else
return checkBox1.Checked.(initInvoke);
}
不要使用 Func<>
,因为它不会 return 任何东西。请改用 Action
。
private void Checkbox_check()
{
if (checkBox1.InvokeRequired)
checkBox1.Invoke(new Action(Checkbox_check));
else
{
// do what you like to do on the ui context
// checkBox1.Checked; // bad here i know, yep...
}
}
从另一个线程获取选中状态,你可以这样做:
private bool Checkbox_check()
{
// result value.
bool result = false;
// define a function which assigns the checkbox checked state to the result
var checkCheckBox = new Action(() => result = checkBox1.Checked);
// check if it should be invoked.
if (checkBox1.InvokeRequired)
checkBox1.Invoke(checkCheckBox);
else
checkCheckBox();
// return the result.
return result;
}
我不建议这样做,这可能会导致死锁等。我建议您在线程启动时传递检查的值,这样您就不必进行任何跨线程调用。