我已经创建了一个帮助类来包装过程:
public class FormObject
{
private readonly Form _referenceForm;
public delegate void SetTextCallback(string text);
private readonly Control _control;
public FormObject(Form referenceForm, Control control)
{
_referenceForm = referenceForm;
_control = control;
}
public void WriteToControl(string text)
{
if (_control.InvokeRequired)
{
SetTextCallback d = WriteToControl;
_referenceForm.Invoke(d, new object[] { text });
}
else
{
_control.Text = text;
}
}
}
我称之为:
FormObject fo = new FormObject(this, txtOutput);
fo.WriteToControl("message");
但是,该应用程序挂起在以下行:
_referenceForm.Invoke(d, new object[] { text });
没有抛出任何错误,等待也没有做任何事情。我在这里看不到什么?
- 编辑 -
对于上下文,这是连接到TCP服务器的客户端TCP应用程序。我想将从服务器收到的结果消息显示在txtOutput
。
应用程序正确加载并运行,并且只有在单击按钮时才会调用此调用调用。
当我接近Invoke时,这是我当前的线程:
答案 0 :(得分:1)
这样的事情会起作用。
if (_control.InvokeRequired)
{
IAsyncResult result = _control.BeginInvoke((Action)(() => control.text = text));
_control.EndInvoke(result);
}
else
{
_control.Text = text;
}