C#winforms:我的GUI和逻辑分离是否正确?

时间:2009-05-20 00:48:03

标签: c# .net winforms user-interface

修改

根据以下建议发送逻辑代码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();  

1 个答案:

答案 0 :(得分:3)

我在表单和searchCore之间没有循环引用。 你为什么不通过回调让搜索逻辑回复形成?这样,搜索不需要知道表单,更容易测试。