我有一个GUI,所有意图和目的都非常基本。列表视图,html表单,就是这样。
我希望用户具有以下行为能力:
1 - 点击“实时”复选框。单击时,后台线程将每10秒运行一次。
2 - 如果创建了一个新文件(这很容易,观察一个新文件)我想在我的主gui中显示一个警告。现在显示的位置是任意的(例如,在标签中)。
主要问题是我无法弄清楚如何在多线程示例中执行此操作。我的目标与多线程完全一致:执行任务1和2,无需锁定任务1.意思是,在更新检查运行时,用户可以与GUI交互,就好像后台没有任何内容一样。
如果您需要更多详细信息以便更好地回答此问题,请与我们联系。
谢谢!
答案 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_Event
和FileEventArgs
。
然后在您收到活动的用户界面中,您有以下内容:
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教程。最后,我相信你将能够使用线程。你必须小心,因为你必须管理那些可能是一项艰巨任务的线程。我从未见过喜欢调试多个线程的程序员......