我有一个名为displayPanel
的小组。在此面板中,我显示UserControl
,具体取决于使用以下方法的方法单击按钮行中的哪个按钮:
private void button_Click(Object sender, EventArgs e)
{
displayPanel.Controls.Clear();
displayPanel.Controls.Add(UserControl);
}
在其中一个用户控件中,我有一个方法:
private void StartWork()
{
Cursor.Current = Cursors.WaitCursor;
DoWork();
Cursor.Current = Curors.Default;
}
然后我将其更改为:
private async void StartWork(Object sender, EventArgs e)
{
Application.UseWaitCursor = true;
await DoWork();
Application.UseWaitCursor = false;
}
这样我就可以更改UserControl
中displayPanel
显示的DoWork()
,同时DoWork()
在后台忙碌。启动DoWork()
而不更改用户控件会显示等待光标直到DoWork()
完成,然后再次显示默认光标。
启动DoWork()
然后更改显示的用户控件也会显示等待光标直到DoWork()
完成,然后再返回默认光标。然而!如果我现在更改回启动UserWaitCursor
的用户控件,则表示usercontrol显示等待光标。
打印Cursor
初始用户控件的所有DoWork()
和false
属性,分别显示Cursor.WaitCursor
和false
。 (而不是预期的:Cursor.Default
和UserControl.UseWaitCursor = !UserControl.UseWaitCursor
)
现在我发现我可以通过两次调用UserControl.Cursor
来“修复”我的问题。但这感觉不对,我宁愿正确地修复它。这让我想到了一个问题:在Cursor.WaitCursor
中将Application.UseWaitCursor
设置为false后,为什么DoWork()
卡在data3 = {k1: dict(Counter(v1) + Counter(v2)) for (k1, v1), (k2, v2) in
zip(data1.items(), data2.items())}
?
编辑:我做了一个简单的项目,我可以重现这个问题。在下面的pastebin中有一个表单和2个用户控件,可以重现这个标记的问题:http://pastebin.com/PUkvJxMw