Могу ли я переключаться между двумя потоками управления. Begininvoke?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Могу ли я переключаться между двумя потоками управления. Begininvoke?

Сообщение Anonymous »

У меня есть приложение Winform of .net Framework 4.7.2. У него есть два веб -брузере. И я хочу назвать сценарий JS. И если я нажму кнопку 2 до завершения Trade1, Thread1 замернет. Application.doevents не помогает. < /P>
Кроме того, я использовал Jint для вызова JS Script, и два потока работают хорошо (потому что Jint не нужно вызывать в методе Control.BeginInvoke). < /P>
Все еще хочу знать: < /p>






Есть ли способ переключаться между этими двумя потоками? < /li>
< /ol>

Код: Выделить всё

public partial class Form1 : Form
{
private JSHelper _jsHelper1;
private JSHelper _jsHelper2;
private Thread _thread1;
private Thread _thread2;

public Form1()
{
InitializeComponent();
_jsHelper1 = new JSHelper(textBox1);
_jsHelper2 = new JSHelper(textBox2);
webBrowser1.Url = new Uri($"{Application.StartupPath}\\text.html");
webBrowser1.ObjectForScripting = _jsHelper1;
webBrowser2.Url = new Uri($"{Application.StartupPath}\\text.html");
webBrowser2.ObjectForScripting = _jsHelper2;
}

private void button1_Click(object sender, EventArgs e)
{
_thread1 = new Thread(() =>
{
BeginInvoke((EventHandler)delegate
{
webBrowser1.Document.InvokeScript("main");
});
});
_thread1.Start();
}

private void button2_Click(object sender, EventArgs e)
{
_thread2 = new Thread(() =>
{
BeginInvoke((EventHandler)delegate
{
webBrowser2.Document.InvokeScript("main");
});
});
_thread2.Start();
}
}
< /code>
jshelper.cs
[System.Runtime.InteropServices.ComVisible(true)]
public class JSHelper
{
private TextBox _logTextBox;
public JSHelper(TextBox tb)
{
_logTextBox = tb;
}

public void println(string txt)
{
int begin = Environment.TickCount;
int leftTime;
do
{
//Some business logic here which needs timeout

Application.DoEvents(); //If remove this line, the UI will freeze.
leftTime = 1000 - CalcCurrentTickCount(begin);
} while (leftTime > 0);

_logTextBox.BeginInvoke(new Action(() =>
{
_logTextBox.AppendText($"\r\n{txt}");
}));
}

private int CalcCurrentTickCount(int dwBeginTickCount)
{
int dwTickCount = 0;
int dwEndTickCount = Environment.TickCount;
if (dwEndTickCount < dwBeginTickCount)
{
dwTickCount = (int)~0 - (dwBeginTickCount - dwEndTickCount);
}
else
{
dwTickCount = dwEndTickCount - dwBeginTickCount;
}
return dwTickCount;
}
}
< /code>
xtext.html





function main()
{
for (var i = 0; i < 10; i++)
{
window.external.println("Hello world!");
}
}






Подробнее здесь: https://stackoverflow.com/questions/796 ... egininvoke
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Автоматически переключаться между переключателями, но также иметь возможность переключаться вручную
    Anonymous » » в форуме Jquery
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • C# Очереди сообщений между потоками и общие проблемы с потоками
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • C# Очереди сообщений между потоками и общие проблемы с потоками
    Anonymous » » в форуме C#
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • C# Очереди сообщений между потоками и общие проблемы с потоками
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Dispatcher.BeginInvoke() без ожидания все еще выполняется асинхронно?
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»