Visual Studio 2012 ulti、C#.NETWPFを使用します。
WinFormsのコードでタスクを使用するのは簡単でした。
デリゲートを作成し、コードの関数を作成し、タスクを作成するだけで、イベントはシンプルなボタンになります。簡単なもの。私が抱えている問題は次のとおりです...
- 通常どおりスレッドを作成しますが、イベントは変更されたテキストで行われます。
私が抱えている問題はロジックについて考えることです。イベントを変更するだけでは、ユーザーがコードを実行するよりも速く入力できるため、これが機能していることがわかりません(この場合はsql query selectステートメント)。そこでは、私がうまくいくとは思わない多くのタスクを実行しようとします。
基本的に、ユーザーは名前または番号でアカウントを検索するために使用されるテキストボックスを入力します。このテキストボックスでは、プロセス全体をスレッド化したいと思います。
私が考えることができる唯一の解決策は、スレッドがまだ実行されている場合にテキストが変更されるため、そのスレッドを停止して新しいスレッドを作成することですが、SQLストアドプロシージャが呼び出すので、それがクリーンな方法であるかどうかはわかりません。
それで、どんな体もこれに対する解決策を手に入れましたか?
さらに情報が必要な場合は、お問い合わせください。また、必要に応じて理解を深めるために現在機能しているコードもいくつか提供します...
Invokeメソッドを設定します。
private void SetDataGrid(bool AutoGenerateColumns, Object DataSource, String DataMember, DataGridViewAutoSizeColumnsMode Mode)
{
if (this.ParetoGrid.InvokeRequired)
{
this.ParetoGrid.Invoke(new Action<bool, Object, String, DataGridViewAutoSizeColumnsMode>(SetDataGrid),
AutoGenerateColumns, DataSource, DataMember, Mode);
}
else
{
this.ParetoGrid.AutoGenerateColumns = AutoGenerateColumns;
this.ParetoGrid.DataSource = DataSource;
this.ParetoGrid.DataMember = DataMember;
ParetoGrid.AutoResizeColumns(Mode);
}
}
別のメソッドでinvokeメソッドを呼び出します。
Private void GetSomething()
{
//sql code get data
SetDataGrid(true, dataSet1, "Pareto", DataGridViewAutoSizeColumnsMode.AllCells);
}
次に、イベントでタスクを開始します。
private void myButton_Click(Object sender, EventArgs e)
{
Task t = new Task(() => getSomething());
t.Start();
}
ご覧のとおり、単純なものですが、単純な変更イベントはロジック全体を台無しにしているようです。