以下代码测试我的连接。连接超时设置为 30 秒。我想将当前光标更改为等待光标,但它不起作用。
我的代码:
private void pbConnectionTest_Click(object sender,EventArgs e) {
try {
Cursor.Current = Cursors.WaitCursor;
Thread thread = new Thread(new ThreadStart(TestConnection));
thread.Start();
} finally {
Cursor.Current = Cursors.Default;
}
我还尝试在函数 TestConnection 中处理 Cursor。但它在那里不起作用。
这个例子工作没有问题:
Cursor.Current = Cursors.WaitCursor;
try
{
Thread.Sleep(5000); // wait for a while
}
finally
{
Cursor.Current = Cursors.Default;
}
我做错了什么?
最佳答案
下面的代码是错误的(逻辑上)。
finally
{
Cursor.Current = Cursors.Default;
}
这里发生的是
- 光标将更改为等待光标。
- 线程将启动,并且光标将立即再次更改为默认值。(在线程完成之前)。
因此,您应该在线程完成后放置以下语句。
Cursor.Current = Cursors.Default;
这里你应该知道的是,调用 thread.Start();
将立即返回。(不等待线程完成)
解决方案1
从 finally
block 中删除语句并执行以下操作。
void TestConnection()
{
..............
..................
this.Invoke(new MethodInvoker(() =>
{
Cursor = Cursors.Default;
}));
}
关于c# - 无法更改当前光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20843871/