我正在使用计时器定期读入日志文件并将某些内容发布到我正在用 C# 开发的 Windows 窗体应用程序中的文本框中。我通过向 set_textbox_thread 发送一个字符串来执行此操作,该字符串将文本发布到下面 else 中的相应文本框 (tbc)。下面的代码适用于我构建的练习应用程序。但是,相同的代码运行,但无法在我正在构建的完整应用程序中更新我的文本框。Invoke 语句似乎失败了,该语句无法再次调用 set_textbox_thread。我的理论是,因为我的完整应用程序有一组更复杂的控件,所以我没有通过正确的控件调用 Invoke。我尝试通过“this”父面板、父表单和触发 set_textbox_thread 的按钮来调用它,并且正在处理相同的结果。两个问题:
- 我应该在哪个控件下调用 Invoke?
- 有没有办法检索“拥有底层窗口句柄控件的线程?我可以通过 Controls.Owner 方法来做到这一点吗?
- 我尝试使用 try/catch 进行此 Invoke 调用,但无法在 catch 中检索错误消息。任何想法如何以这种方式解决问题?
提前致谢!
private delegate void stringDelegate(string s);
private void set_textbox_thread(string s)
{
TextBox tbc = get_thread_tb();
if (tbc.InvokeRequired)
{
MessageBox.Show("Invoke Required");
stringDelegate sd = new stringDelegate(set_textbox_thread);
**this.Invoke(sd, new object[] {s });**
MessageBox.Show("Invoke Completed");
}
else
{