Я создал работающего бота, который использует C# потоков для выполнения нескольких действий, и поэтому пользователь сможет щелкнуть форму, не застревая.
Моя новая цель - разрешить пользователь, чтобы иметь возможность написать сценарий (In javascript) в RichTextBox, чтобы он мог модифицировать своего собственного бота по своему усмотрению.
Большая проблема заключается в том, чтобы найти хороший способ позволить пользователю сделать сценарий, сначала я попробовал C#, но мне не удалось найти безопасный способ сделать это (поэтому он не будет использовать его как преимущество для получения исходного кода). (Поиск часов).
После этого я попытался переключиться на JS, используя скрытый WebBrowser и используя код JS из него с методами C#. Это работает, но после того, как я нажму кнопку «НАЧАТЬ ЗАПУСК», которая запускает l oop скрипт пользователя, я не могу использовать кнопки формы, даже когда «начать боттинг» находится внутри потока.
Любая идея, как я могу сделать код JS WebBrowser l oop, когда я смогу использовать форму без зависания? Или альтернативный способ создания сценария, как я описал, я хотел?
Мой код примера:
Метод:
private void BottingThread()
{
JavaScriptHandler js = new JavaScriptHandler();
js.ExecuteJS(webBrowser1);
}
Класс:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace bot1
{
public class JavaScriptHandler
{
// Constructor.
[ComVisible(true)]
public void ExecuteJS(WebBrowser wb)
{
// Set the WebBrowser to use an instance of the ScriptManager to handle method calls to C#.
wb.ObjectForScripting = new ScriptManager(Script.ActiveForm);
// Create the webpage.
wb.DocumentText = @"<html>
<head>
<title>Test</title>
</head>
<body>
<script>
while (true) {
window.external.AnotherMethod('Hello');
wait(2500);
}
function wait(ms){
var start = new Date().getTime();
var end = start;
while(end < start + ms) {
end = new Date().getTime();
}
}
</script>
</body>
</html>";
}
}
[ComVisible(true)]
public class ScriptManager
{
private Form mForm;
// Constructor.
public ScriptManager(Form form)
{
mForm = form;
}
public void AnotherMethod(string message)
{
MessageBox.Show(message);
}
}
}