0
我正在为自己的用途创建一个小型实用程序,当从文件中读取时打开浏览器中的链接。我有一个按钮,在打开像这样一个文件的所有链接:使用异步时更改winform控件的属性。线程
private void buttonOpenAll_Click(object sender, EventArgs e)
{
if (LinksInFile.Count() != 0)
{
buttonOpenAllCancel.Visible = true;
buttonOpenAll.Visible = false;
ThreadPool.QueueUserWorkItem(new WaitCallback(OpenAllURL), cts.Token);
}
}
这是把调用此:
public static void OpenAllURL(Object obj)
{
CancellationToken token = (CancellationToken) obj;
foreach (var link in LinksInFile)
{
if (token.IsCancellationRequested)
{
break;
}
OpenUrlInChrome(link, false);
Thread.Sleep(7500); //to ensure the browser doesn't break
}
}
正如你可以看到我有我的WinForm的两个按钮,我切换当我开始执行的可见性状态,可见按钮时执行这个任务应该是取消按钮,它看起来像这样:
private void buttonOpenAllCancel_Click(object sender, EventArgs e)
{
cts.Cancel();
cts.Dispose();
buttonOpenAll.Visible = true;
buttonOpenAllCancel.Visible = false;
}
此代码按预期工作,直到有人决定不取消 URL的打开,然后取消按钮仍然可见,你必须按下它,以便再次启用“全部打开”按钮。我无法设置OpenAllURL方法内部按钮的可见性,因为它在UI中的单独线程中运行。如果我想在排队操作完成后启用“全部打开”按钮,我有什么选择?
我不完全知道如何实现这个解决方案与我目前的设置,谨慎详细说明? – UndyingJellyfish
在您的OpenAllURL方法中,您可以调用一个事件,该事件在GUI中启用/禁用按钮时已经设置了侦听器。 –