【发布时间】:2009-05-20 00:48:03
【问题描述】:
编辑
根据以下发送逻辑代码 GUI 委托的建议,我想出了这样的代码:
Action ClearFunction = new Action(()=>Invoke(new Action(delegate() { ResultsBox.Clear(); } ) ));
可以缩短吗?
这是我的 C# windows 窗体程序的一部分。
当我开始将代码转换为使用另一个线程时,我开始感觉非常笨拙,因为我生成了线程并创建了封装在委托中的公共方法,因此逻辑代码实际上可以使用 GUI。
请就更好的习语或架构改进提出建议。谢谢。
// form1.cs
public void ClearResultsBox()
{
ResultsBox.Clear();
}
public void PrintResults(string s)
{
ResultsBox.AppendText(s);
}
private void SearchButton_Click(object sender, EventArgs e)
{
var t = new Thread(() => SearchCore.Execute(DirectoryBox.Text, SearchBox.Text, this));
t.Start();
}
// logic.cs
class SearchCore
{
delegate void ClearFunction();
delegate void AppendFunction(string a);
static ClearFunction clear;
static AppendFunction print;
public static void Execute(string path, string searchterm, MainForm form)
{
clear = new ClearFunction(() => form.Invoke(new ClearFunction(form.ClearResultsBox)));
print = new AppendFunction(s => form.Invoke(new AppendFunction(form.PrintResults), s));
clear();
【问题讨论】:
-
@senfo 没有更多的东西。 Execute 是一个长时间运行的方法(2 分钟以上),每隔几秒输出一次。
-
您能否提供更多关于您想要完成的任务的详细信息?你有一些相当大的设计缺陷,但我不想把你引向错误的方向,直到我明白你想去哪里。例如,您是否只是想保持 UI 响应式?
-
对不起,我删除了我的评论以添加到它。
标签: c# .net winforms user-interface