編集ロジックコードGUIの代表を送信するために、以下の提案に基づいてC#winforms: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秒ごとに出力される長時間実行される方法(2分以上)です。 – Unknown
あなたは何を達成したいと考えていますか?かなりの設計上の欠陥がありますが、どこに行きたいか理解するまでは間違った方向に向かわせたくありません。たとえば、単にUIを反応させようとしていますか? – senfo
申し訳ありませんが、私はコメントを削除して追加しました。 – senfo