首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法更改当前光标

无法更改当前光标
EN

Stack Overflow用户
提问于 2013-12-30 16:52:21
回答 4查看 3.1K关注 0票数 2

下面的代码测试我的连接。连接超时设置为30秒。我想将当前游标更改为等待游标,但它不起作用。

我的代码:

代码语言:javascript
复制
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中处理游标。但它在那里不起作用。

此示例工作正常,没有问题:

代码语言:javascript
复制
Cursor.Current = Cursors.WaitCursor;
try
{
  Thread.Sleep(5000);  // wait for a while
}
finally
{
  Cursor.Current = Cursors.Default;
}

我做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-30 17:19:24

下面的代码(逻辑上)是错误的。

代码语言:javascript
复制
finally 
{             
    Cursor.Current = Cursors.Default;
}

这里发生的是

  1. 光标将被更改为等待游标。
  2. 线程将启动,并立即将光标再次更改为默认。(在线程完成之前)。

因此,您应该在线程完成后放置follwing语句。

代码语言:javascript
复制
        Cursor.Current = Cursors.Default;

这里您应该知道的是,调用thread.Start();将立即返回。(不等待线程完成)

Solution1finally块删除语句,并按以下方式执行。

代码语言:javascript
复制
void TestConnection()
{
    ..............
    ..................


   this.Invoke(new MethodInvoker(() =>
   {
        Cursor = Cursors.Default;
   }));   
}
票数 3
EN

Stack Overflow用户

发布于 2013-12-30 16:56:24

这是因为您的第一个示例将光标更改为默认。

由于您正在启动一个新线程,该线程将运行TestConnection代码。原始线程继续其执行,最后阻止将游标更改为默认值。您需要等到线程完成后再更改游标返回--如果您可以在TestConnection方法的末尾执行它,这将是最简单的方法。

但仅仅因为它是最简单的,它可能不是正确的解决办法。您可能需要分离关注点,将UI与连接测试分开。在这种情况下,您将需要一个事件、回调或类似的事件;在连接测试完成时通知您。

票数 3
EN

Stack Overflow用户

发布于 2013-12-30 16:59:17

您的示例中似乎没有停顿,因为它只是启动一个线程,而不是等待该线程的执行返回。但是要强制使用游标,可以使用OverrideCursor http://msdn.microsoft.com/en-us/library/system.windows.input.mouse.overridecursor(v=vs.110).aspx,但是就像我说的那样,除非等待线程返回,否则这可能什么也做不了。

代码语言:javascript
复制
try 
{
    Mouse.Overidecursor = Cursors.WaitCursor;
    Thread thread = new Thread(new ThreadStart(TestConnection));
    thread.Start();
} 
finally 
{
    Mouse.Overidecursor = null;
}

如果要等待处理完成,可以使用BackgroundWorker并使用RunWorkerCompleted事件将光标更改为默认游标。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20843871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档