使用 Visual Studio 2012 ulti、C# .NET WPF。
在我的 winforms 代码中使用 Tasks 过去很简单。
我要做的就是创建一个委托,为我的代码创建一个函数,创建一个任务,事件将是一个简单的按钮。容易的东西。我遇到的问题是以下...
- 像往常一样创建一个线程但是该事件将在text changed上。
我遇到的问题是考虑逻辑,如果我只是更改事件,我看不到这个工作,因为用户键入的速度可能比代码运行的速度快(在这种情况下是一个 sql 查询选择语句)。在那里它会尝试运行许多我什至认为行不通的任务。
基本上用户输入用于按名称或号码搜索帐户的文本框。在这个文本框中,我想线程化整个过程。
我能想到的唯一解决方案是,如果有一个线程仍在运行,则文本会发生变化,停止该线程并创建新的线程,但不确定这是否是一种干净的方法,因为它的 sql 存储过程将被调用。
那么任何机构都可以解决这个问题吗?
如果您需要更多信息,请询问。如果需要,我还将提供一些当前可以帮助您理解的代码...
设置调用方法:
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();
}
正如你所看到的简单的东西,但简单的变化事件似乎把整个逻辑搞砸了。