如何在运行时在代码块结束之前更改按钮的背景颜色

在窗口之间切换时必须使用Window Handle才能访问窗口。


var selecttxt1 = Ad_Search_Direct_Link_Text.GetAttribute("value");

        string getimpression = selecttxt1.Replace("C.ashx", "I.ashx");

        driver.OpenInNewTab(getimpression);

        driver.ClickElement(Click_Impression);



        var aa = driver.Url; 

        Uri uri = new Uri(aa);`enter code here`

         string newTabHandle = driver.WindowHandles.Last();

        var newTab = driver.SwitchTo().Window(newTabHandle);

        string finallandedurltext = newTab.GetComponents(UriComponents.Scheme | UriComponents.Host, UriFormat.UriEscaped);

        driver.Close();

希望这有帮助。


缥缈止盈
浏览 99回答 3
3回答

慕尼黑8549860

这不起作用的原因是因为 Thread.Sleep() 正在阻止线程完成。仅当应用程序不执行任何操作时,即在您的方法完成后,才会重绘窗口。如果您删除更改它的行,DarkGreen您将看到它在五秒钟后改变颜色。您应该使用计时器来解决您的问题。如果您愿意,您可以强制它提前刷新界面,而无需通过调用Application.DoEvents();将反映您所做的更改(例如颜色更改)离开该方法。    button1.BackColor = Color.Lime;    Application.DoEvents()    Thread.Sleep(5000);    button1.BackColor = Color.DarkGreen;请注意,在具有用户界面的程序中放置线程睡眠是一个坏主意,但出于说明目的,它将向您展示如何使其改变颜色。

翻过高山走不出你

您的问题是因为 UI 线程被阻止。您需要在单独的线程中运行此逻辑。试试这个代码:private async void button1_Click(object sender, EventArgs e){    button1.BackColor = Color.LimeGreen;    await Task.Run(() =>    {        System.Threading.Thread.Sleep(5000);        button1.BackColor = Color.DarkGreen;    });}这会将您的按钮变为LimeGreen,然后等待 5 秒钟再将其变为DarkGreen。这是有效的,因为我们在一个新线程中旋转它,因此不会锁定 UI。

郎朗坤

我不推荐使用 Thread.Sleep() 因为它会冻结你的界面。您还需要刷新按钮以显示更改。您可以使用 async 和 wait 方法来延迟按钮颜色更改 在 button1_click 函数的 private 关键字之后添加 async 并创建 async Task 函数并使用 await awaiting() 删除 Thread.Sleep() 函数;public partial class Form1 : Form{    public Form1(){    InitializeComponent();}private async void button1_Click(object sender, EventArgs e){    button1.BackColor = Color.Lime;    button1.Refresh();    await awaiting();    button1.BackColor = Color.DarkGreen;}private async Task awaiting() {        await Task.Delay(5000);    }}
打开App,查看更多内容
随时随地看视频慕课网APP