【问题标题】:"Please Wait" Loading bar in Windows Phone App C# until sql statement is finished“请稍候”Windows Phone App C# 中的加载栏,直到 sql 语句完成
【发布时间】:2014-08-17 13:33:34
【问题描述】:

我的 Windows Phone 应用程序有问题(我在开发 C# WP8 应用程序方面没有经验:/)。我试图在stackoverflow中找到解决方案,但还没有找到正确的答案。

所以,这里是对问题的简短回顾:

我在代码中做一些 SQL 工作,完成后,用户会得到一个结果列表。到目前为止还不错,但是有些查询需要更多时间,并且用户没有得到像“请稍候”这样的响应。我尝试实现它,但它不起作用。

我做了什么?

在主方法“MainPage()”中 我使用以下方式启动 SQLiteConnection:

public SQLiteConnection conn = new SQLiteConnection(DB_PATH);

用户进行输入并按下按钮开始搜索(sql 查询)。 通过按下按钮触发的方法称为“ButtonSearch_Click”。我在这个方法中做的第一件事是设置一个可见的进度条,上面写着“请稍候”:

Progressbar.Visibility = Visibility.Visible;
PleaseWaitBlock.Text = "please wait...";

在此之后,我对用户的输入进行了一些工作,这在这种情况下并不是真正必要的。然后我创建一个 sqlCommand 对象:

SQLiteCommand sqlComm = new SQLiteCommand(conn);

并使用 CommandText 方法输入查询,例如:

sqlComm.CommandText = "SELECT * FROM abc WHERE (column_1 LIKE '" + input + "%')";

注意:“输入”是用户的输入。

现在我通过以下方式执行查询:

var queryname = sqlComm.ExecuteQuery<table>();

然后我循环查询名称:

foreach (var item in queryname)
{
 // I do some work here
}

然后我让结果框可见以显示结果:

resultbox.Visibility = Visibility.Visible;

就是这样。问题是进度条不会以这种方式显示。如果我在没有 sql 查询的情况下尝试相同的操作,它将显示进度条,这意味着进度条可以工作。

如何让进度条可见,直到 sql 语句完成?

感谢您的回答!

亲切的问候, 优皮

【问题讨论】:

标签: c# sqlite windows-phone-8 progress-bar


【解决方案1】:

您似乎在与 UI 相同的线程上执行工作(SQL 语句);这可以防止 UI 在工作完成时执行任何操作(例如显示进度条)。

有许多不同的方法可以解决这个问题,但原则上,它们都归结为同一件事:在 UI 之外的其他线程上执行所有耗时的工作;永远不要阻塞 UI 线程。

一种可能是使用 BeginExecuteReader 而不是 ExecuteQuery,并在 AsyncCallback 方法中处理结果。如果您对查询结果所做的工作将很快完成,那么此解决方案就足够了。

另一种可能性是启动您在后台工作线程中响应搜索点击所做的一切。如果您对查询结果进行的处理非常耗时,那么这将是必要的。使用这种方法时,您需要记住,您不能在非 UI 线程上与 UI 元素进行交互;您的工作线程操作需要对 UI 元素执行 BeginInvoke 之类的操作,以填充 UI 控件(并关闭进度条)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 2022-11-10
    • 2014-01-09
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多