以下代码是:使用委托,根据控件的InvokeRequired属性判断当前控件的更新操作是否是在另一个线程中。如果是,则使用委托进行方法调用并更新控件。
delegate void ResetMsgTxtCallBack(TextBox textbox);
private void ResetMsgTxt(TextBox textbox)
{
if (textbox.InvokeRequired)
{
ResetMsgTxtCallBack resetMsgTxtCallBack = ResetMsgTxt;
textbox.Invoke(resetMsgTxtCallBack, new object[] { textbox });
}
else
{
textbox.Clear();
textbox.Focus();
}
}
----------------------------------------------------------
1.textbox.Invoke方法里为什么用new object[] { textbox }作参数?
2.为什么这样回调后就会跳转到else里面呢?
总体来说 :就是这一句textbox.Invoke(resetMsgTxtCallBack, new object[] { textbox });后面为什么用new object[] { textbox }做参数我不懂求前辈们指点c#线程delegate
delegate void ResetMsgTxtCallBack(TextBox textbox);
private void ResetMsgTxt(TextBox textbox)
{
if (textbox.InvokeRequired)
{
ResetMsgTxtCallBack resetMsgTxtCallBack = ResetMsgTxt;
textbox.Invoke(resetMsgTxtCallBack, new object[] { textbox });
}
else
{
textbox.Clear();
textbox.Focus();
}
}
----------------------------------------------------------
1.textbox.Invoke方法里为什么用new object[] { textbox }作参数?
2.为什么这样回调后就会跳转到else里面呢?
总体来说 :就是这一句textbox.Invoke(resetMsgTxtCallBack, new object[] { textbox });后面为什么用new object[] { textbox }做参数我不懂求前辈们指点c#线程delegate
解决方案 »
- datagridview排序以后,顺序错乱了
- 请问大家用何种开源框架
- 大侠都是怎么安装程序的?
- 问一个mysql的删除问题
- 寻找 VS.NET2005 中的一个控件!类似与第三方工具dotnetbar控件集里的sidebar控件!
- Unreachable code detected 错误是什么错误啊,帮我看看,谢谢!!
- 问个简单的问题:关于窗体的
- 急求答案:向日葵甘特图在客户端无法显示
- 如何让datagrid部分列只读?
- wrappanel 可以添加window吗
- esriControls.ControlsFeatureSelectionMenu中esriControls的引用是什么?
- SQL server 008
那为什么这样回调后就会跳转到else里面呢?
textbox.Invoke(resetMsgTxtCallBack, new object[] { textbox });原因是你传入了ResetMsgTxt这个方法。而重新调用的那次是在UI线程中运行,此时textbox.InvokeRequired为false,所以走入else分支。你的代码等价:private void ResetMsgTxt(TextBox textbox)
{
if (textbox.InvokeRequired)
{
ResetMsgTxtCallBack resetMsgTxtCallBack = ResetMsgTxt1;
textbox.Invoke(resetMsgTxtCallBack, new object[] { textbox });
}
}
private void ResetMsgText1(TextBox textbox)
{
textbox.Clear();
textbox.Focus();
}你把两个函数写成一个了而已。