在进行数据库调用之前,在CheckBox中设置勾选

时间:2012-08-03 10:53:13

标签: c# .net-4.0 checkbox draw

我有一个标准的CheckBox,在CheckChanged事件中,我调用数据库来刷新结果集。但是,数据库调用可能需要大约一秒钟,这会导致复选框中绘制的勾号被延迟,这可能导致用户反复点击。你知道用户是什么样的!!

那么,无论如何,我可以在数据库调用之前进行勾选绘制???

提前致谢。

3 个答案:

答案 0 :(得分:0)

首先,我建议您不要在UI线程上进行数据库调用。而是使用BackgroundWorker或者只是启动另一个线程。

但是,如果您只想控制用户再次单击该复选框,只需将控件设置为disabled并告诉用户通过光标等待:

public void CheckBox_CheckChanged(object sender, EventArgs e){
   CheckBox.Enabled = false;
   Cursor = Cursors.Wait;
   //Long Running database operation
   Cursor = Cursor.Default;
   CheckBox.Enabled = true;
}

答案 1 :(得分:0)

不要在UI线程上执行慢速数据库调用。使用BackgroundWorker

答案 2 :(得分:0)

正如其他人所提到的,您可以使用BackgroundWorker class。 另一种选择是使用Task Parallel Library

private void CheckBox_CheckChanged(object sender, EventArgs e)
{
    Task.Factory.StartNew<MyResultData>(DoLongOperation)
                .ContinueWith(UpdateUI, TaskScheduler.FromCurrentSynchronizationContext());
}

private MyResultData DoLongOperation()
{
    // Long operation

    // Return result to be used to update the UI
    return new MyResultData();
}

private void UpdateUI(Task<MyResultData> task)
{
    // Get the result of the task
    MyResultData data = task.Result;

    // Update the UI using the data
}

使用任务时,如果您将来将代码定位到.NET 4.5,您还可以获得使用新的async-await功能的好处。