C#:根据backgroundtask定期更新GUI

时间:2011-10-20 20:15:35

标签: c# html multithreading

我有一个GUI,所有意图和目的都非常基本。列表视图,html表单,就是这样。

我希望用户具有以下行为能力:

1 - 点击“实时”复选框。单击时,后台线程将每10秒运行一次。

2 - 如果创建了一个新文件(这很容易,观察一个新文件)我想在我的主gui中显示一个警告。现在显示的位置是任意的(例如,在标签中)。

主要问题是我无法弄清楚如何在多线程示例中执行此操作。我的目标与多线程完全一致:执行任务1和2,无需锁定任务1.意思是,在更新检查运行时,用户可以与GUI交互,就好像后台没有任何内容一样。

如果您需要更多详细信息以便更好地回答此问题,请与我们联系。

谢谢!

3 个答案:

答案 0 :(得分:1)

使用线程中的事件告诉UI某些内容发生了变化:

    // Just detected that that a new file has been created
    if (this.FileCreated_Event != null)
    {
        this.FileCreate_Event(this, new FileEventArgs(newFileName));
    }

正确声明FileCreated_EventFileEventArgs

然后在您收到活动的用户界面中,您有以下内容:

this.fileChecker.FileCreated_Event += this.FileCreated_Event;

    private void FileCreated_Event(object sender, TrackStatusEventArgs e)
    {
        if ((sender as Control).InvokeRequired)
        {
            (sender as Control).Invoke(action);
        }
        else
        {
            action();
        }
    }

其中action是您要做的事情。

答案 1 :(得分:1)

当我需要执行数据库操作同时仍然允许GUI响应时,我发现有几个站点对于实现后台工作程序很有用:

http://msdn.microsoft.com/en-us/library/zw97wx20.aspx

http://www.codeproject.com/KB/cs/AsynchronousCodeBlocks.aspx

答案 2 :(得分:0)

试用this教程。最后,我相信你将能够使用线程。你必须小心,因为你必须管理那些可能是一项艰巨任务的线程。我从未见过喜欢调试多个线程的程序员......