C#调用线程函数失败

时间:2012-07-17 19:53:12

标签: c# multithreading inheritance invoke

我正在使用计时器定期读入日志文件并将某些内容发布到Windows表单应用程序中的文本框中。我在C#中进行开发。我通过向set_textbox_thread发送一个字符串来执行此操作,该字符串将文本发布到下面其他位置的相应文本框(tbc)中。下面的代码适用于我构建的练习应用程序。但是,相同的代码运行,但无法在我正在构建的完整应用程序中更新我的文本框。它似乎在Invoke语句上失败,该语句无法再次调用set_textbox_thread。我的理论是,因为我的完整应用程序有一组更复杂的控件,我不会通过正确的控件调用Invoke。我试过通过"这个"父面板,父窗体和触发set_textbox_thread的按钮,并处理相同的结果。两个问题:

  1. 我应该在哪个控件下调用Invoke?
  2. 有没有办法检索"拥有窗口控件底层控件的线程?我可以通过Controls.Owner方法吗?
  3. 我尝试使用try / catch进行此Invoke调用,但无法在catch中检索错误消息。任何想法如何以这种方式解决问题?
  4. 提前致谢!

    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
            {
    

2 个答案:

答案 0 :(得分:0)

1)你调用什么控件并不重要;只有一个UI线程和任何控件可以将回调编组回该UI线程。

2)你可以用这个帖子做什么?

3)那里没有太多细节。你怎么知道你有错误信息?你是什​​么意思“错误信息”

答案 1 :(得分:0)

调用文本框上的调用:

tbc.Invoke(sd, new object[] {s });