我有一个带有文本框的 windows 窗体txtOutput
。我有一些内容。我已经编写了一个属性来txtOutput.Text
从同一个线程内和跨线程获取和设置两者,如下所示:
public string OutputString
{
get
{
string text = string.Empty;
if (txtOutput.InvokeRequired)
{
txtOutput.BeginInvoke(new MethodInvoker(delegate
{
text = txtOutput.Text;
}));
}
else
{
text = txtOutput.Text;
}
return text;
}
set
{
if (txtOutput.InvokeRequired)
{
txtOutput.BeginInvoke(new MethodInvoker(delegate
{
txtOutput.Text = value;
}));
}
else
{
txtOutput.Text = value;
}
}
}
如果我从同一个线程设置/获取属性,则在调用以下函数(如PrintMessage()
.
public void PrintMessage()
{
MessageBox.Show(OutputString);
}
但是当我这样打电话时new Thread(PrintMessage).Start()
。get
不检索文本框中的值(即显示MessageBox
空字符串)。当我通过在行上保持断点来做同样的事情时:
txtOutput.BeginInvoke(new MethodInvoker(delegate
{
text = txtOutput.Text;
}));
调试时,检索值(即MessageBox
显示txtOutput
内容)
我应该sleep
在某个地方吗?我在哪里犯错?