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中啓用/禁用按鈕時已經設置了偵聽器。 –