解决 消费自定义事件

拉吉

成员
已加入
2020年7月24日
留言内容
8
编程经验
Beginner
目前,我一直在使用Winforms-Thread()来触发自定义事件,但是,我不知道这是否是实现结果的最佳方法

让我们假设我想检查元素的文本是否使用webbrowser进行了更改...如何在不使用线程检查文本是否被更改的情况下触发事件?



C#:
<span id='text'>Text</span>
事件
C#:
OnTextElementChanged()

线
C#:
while(true)
  // check if element text changed
  if(text != oldText)
      OnTextElementChanged();
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
交叉发布于: 使用线程来分散事件

由于缺乏明确性,也关闭了该窗口。您能否也解释一下您指的是什么事件,因为不是这里的每个人都会知道您的情况。当您可能正在做的另一件事完全不同于您时,某些人会假设一件事情。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
目前,我一直在使用Winforms
Winforms or web forms, or ASP? This : <span id='text'>Text</span> - has no place here in winforms unless you are scraping a web browser control or something.
 

拉吉

成员
已加入
2020年7月24日
留言内容
8
编程经验
Beginner
它只是一个随机的示例...例如,使用Selenium检查网页源是否已更改...或使用第三方发布API,并检查是否有新发布...

让我们假设另一个例子:

您想使用硒来构建自己的Whatsapp刮板
您要创建一个名为OnNewMessage()的自定义事件

我该如何触发此事件?我需要创建一个线程来读取所有页面源,并检查是否出现任何新消息,如果是,请引发OnNewMessage()
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
好的,但是将来,您需要告诉我们这些事情。我们并不总是识别事件/方法名称等。因此,如果您使用硒,则需要告诉我们...这就是为什么您关于SO的问题已被关闭的原因。清晰度很重要,因此在提出问题时,请尽可能清晰明了。
 

拉吉

成员
已加入
2020年7月24日
留言内容
8
编程经验
Beginner
我想我找到了答案:

如果我们没有内置事件,则方法是使用线程...如果您使用网络浏览器,则可以使用Javascript事件挂钩/ dom突变
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
由于您从未解释过自己在做什么,因此我无法为您提供书面或错误建议。因为您仍未正确告诉我们或未向我们显示任何暗示您在做什么的相关代码。

模糊的问题得到模糊的答案。
 

拉吉

成员
已加入
2020年7月24日
留言内容
8
编程经验
Beginner
由于您从未解释过自己在做什么,因此我无法为您提供书面或错误建议。因为您仍未正确告诉我们或未向我们显示任何暗示您在做什么的相关代码。

模糊的问题得到模糊的答案。

我仅举了一个通用示例。

尝试与我一起想象,假设您有一个TextBox组件,没有内置事件可检查您的文本是否已更改,并且您需要实现此功能,该怎么做?

C#:
var thread = new Thread(() =>
            {
                var currentText = textBox1.Text; // this will fire a exception, but let do it in this example

                while (true)
                {
                    if (textBox.Text != currentText)
                    {
                        OnTextChanged();
                        currentText = textBox1.text;

                    }

                    Thread.Sleep(1);
                }
            });

这是实施的最佳方法吗?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
Winforms or web forms, or ASP? This : <span id='text'>Text</span> - has no place here in winforms unless you are scraping a web browser control or something.

我正在尝试,但您尚未告诉我们这是什么项目类型。我知道它在Winforms论坛上发布,而且我知道跳伞运动员提到它可能用于Selenium,但是我想确定...

没关系,我刚才看到您在哪里更新了您的帖子。

我该如何触发此事件?

这是一个通用链接 处理和引发事件 start here.
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
您可以在这些文档和相关页面上找到示例。有关事件的其他信息,请参见左侧的树视图。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
为什么不与论坛共享它,以便其他用户知道您如何解决您的问题?
 

拉吉

成员
已加入
2020年7月24日
留言内容
8
编程经验
Beginner
为什么不与论坛共享它,以便其他用户知道您如何解决您的问题?

我已经分享了...

假设您要检查硒页面源是否已更改:


C#:
var watcher = new Thread(() = >{
    var source = driver.PageSource;

    while (true) {
        if (driver.PageSource != source) {
            // Raise event
            PageSourceChanged();
            source = driver.PageSource;
        }

        Thread.Sleep(10);
    }
});

watcher.Start();
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
您可以确定第二好,因为它的代码更少?

好吧凉豆
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,527
地点
弗吉尼亚州切萨皮克
编程经验
10+
次优似乎在技术上赢得了很多:BetaMax与VHS,HD DVD与BluRay,IBM PC与PC Clones
 
最佳 底部