如何在运行时在方法期间立即更改标签文本
本文关键字:标签 文本 运行时 方法 | 更新日期: 2023-09-27 18:02:36
我已经通过stackoverflow搜索了,但找不到答案。我不知道我是否能把这个问题说清楚。反正我也不会说英语=.=
我使用c#和visual studio 2010来开发。我正在做一个表单的用户登录,我想这个表单测试sql server连接期间加载事件。
看起来很简单,代码是:
private void testDBconnection()
{
label3.Text = "Connecting to Database Server......";
SqlServerConnection ssc = new SqlServerConnection();
bool conOK = ssc.isConnectable(ssc.makeConnectionString(
SqlServerConnParamters.SqlServerIPAddress,
SqlServerConnParamters.AccountValidationDatabaseName,
SqlServerConnParamters.SqlServerUserName,
SqlServerConnParamters.SqlServerPassword,
5));
if (conOK)
{
label3.Text = "";
}
else
{
label3.Text = "Database connection failed";
button1.Enabled = false;
}
}
我把这个方法放在Form_Load事件中。
但是在运行时,这个过程甚至在这个表单显示之前就开始了。默认情况下,验证可能持续15秒(我将其设置为5秒,但这也需要时间)。如果连接有问题,则显示为程序打开失败,但显示为连接数据库失败。
我的意图是通过Label3显示"连接到数据库服务器......"告诉用户,并告诉用户连接失败。
我试图找到表单事件像"加载完成",或"加载"(我发现Form_Closed虽然),但我不能。
我猜它与线程,程序睡眠或其他有关。我希望有人能帮我。谢谢大家!
我会这样使用BackgroundWorker。这将推迟数据库检查操作,并且表单加载不会被它锁定。
label3.Text = "Connecting...";
button1.Enabled = false;
var bkw = new BackgroundWorker();
bkw.DoWork += (s, ev) =>
{
SqlServerConnection ssc = new SqlServerConnection();
ev.Result = ssc.isConnectable(ssc.makeConnectionString(
SqlServerConnParamters.SqlServerIPAddress,
SqlServerConnParamters.AccountValidationDatabaseName,
SqlServerConnParamters.SqlServerUserName,
SqlServerConnParamters.SqlServerPassword, 5));
};
bkw.RunWorkerCompleted += (s, ev) =>
{
if ((bool)ev.Result == true)
{
label3.Text = "Connected";
button1.Enabled = true;
}
else
{
label3.Text = "Database connection failed";
}
bkw.Dispose();
};
bkw.RunWorkerAsync();
然而,这需要一些异常处理。如果在DoWork
事件中发生异常,则可以检查RunWorkerCompleted
事件是否发生异常。Error是否为空(它包含异常),并做出相应的反应
使用timer
。在表单加载事件中启动timer
(将间隔设置为2秒或您想要的任何时间)。作为timer
ticks
调用您的连接方法。在testDBconnection()
方法开始时,停止timer
并处理它,因为您不再需要它了。
你不应该在表单加载时使用Form_Load事件来触发事件,你应该重写OnLoad()方法,这样你就可以控制代码何时被触发(有可能有多个订阅者正在听Form_Load,你不知道它们将以什么顺序运行)。
让屏幕刷新最快和最脏的方法是添加
Application.DoEvents();
更改标签后,这将强制屏幕更新。一般来说,虽然这是不好的做法,但从长远来看,上述后台线程将是一个更好的解决方案。