Недавно я наткнулся на собственную библиотеку третьей стороны и есть способ вести себя таким образом:Блокировка вызовов, но не блокирует нить
public Point ClickOnDrawMat(DrawMat drwmat)
{
Point pt;
//waiting user mouse click on DrawMat and assign to pt
return pt;
}
Когда мой код, вызывающий этот метод из основного потока, он будет блокировать по этому методу, пока пользователь не нажмет, затем верните точку с ClickOnDrawMat
.
public void button1_Click(object sender, EventArgs e)
{
Point userClickedPoint = ClickOnDrawMat(oDrwMat); //Wait until user clicked
//Do stuff with point we got
}
Однако он не блокирует основную резьбу. Я все еще могу нажать другую кнопку/UI, пока он все еще ждет щелчка пользователя.
Я заметил, что при ожидании щелчка пользователя одно из основных преимуществ процессора кажется довольно высоким (~ 75%).
И это пример стека вызовов после того, как нажать на другую кнопку, пока она все еще ждет нажатия пользователя:
myProgram.frmMain.button2_Click(xxx) Line 23
[External Code]
ThirdPartyLib.ClickOnDrawMat(xxx) Line 16
myProgram.frmMain.button1_Click(xxx) Line 14
Я интересно, как это может быть сделано?
Заранее благодарим!
Что такое библиотека? – Servy
Halcon, проприетарная библиотека для компьютерного зрения. – user1755712