我正在使用具有根據特定事件更改的屬性的外部庫。有時值會迅速變化(但只能以1到2之間的增量)。我想創建一個事件處理程序來檢測值是否發生了變化,如果發生變化,則將該值作爲方程的一部分移動到屏幕上的一個點上。我目前使用的定時器:爲外部庫的屬性值更改創建事件處理程序
private var foo;
public Form1()
{
this.InitializeComponent();
this.foo = new Foo();
this.DesktopLocation = new Point(foo.Property1 + 100, 500);
Timer timer = new Timer();
timer.Interval = 1;
timer.Tick += new EventHandler(this.Timer_Tick);
timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
this.DesktopLocation = new Point(this.foo.Property1 + 100, 500);
}
其中我公司以關Trigger a custom event for an "external" value change,但我希望有一個更好的解決方案,因爲形式落後於預定點的後面,閃爍如果foo.Property1
改變多次在很短的時間跨度。我試圖讓窗體遵循類似於用戶使用鼠標移動窗體的點。定時器之前,我使用的while循環在一個單獨的線程與遞歸:
private void CheckFoo()
{
while (!this.Created)
{
}
if (new Point(this.foo.Property1 + 100, 500) != this.DesktopLocation)
{
this.Invoke(new Action(() =>
{
this.DesktopLocation = new Point(this.foo.Property1 + 100, 500);
}));
}
while (this.DesktopLocation == new Point(this.foo.Property1 + 100, 500) && this.ContinueLoop)
{
}
if (this.ContinueLoop == false)
{
return;
}
else
{
this.CheckFoo();
}
}
上述方法工作目視如預期約30秒,但隨後將其與StackOverflowException
在不同位置中的代碼崩潰,通常是在this.DesktopLocation = new Point(this.foo.Property1 + 100, 500);
但有時在其他地方(我不能複製其他位置不幸)。我在這裏閱讀了關於StackOverflowExceptions:https://www.dotnetperls.com/stackoverflowexception,它似乎是因爲我使用了遞歸循環,所以我假設我不能使用上面的方法。有沒有什麼方法可以在沒有視覺問題(或例外)的情況下實現?
這與您的第三方類有關,繼承,包裝,創建代理或其他任何 – AlirezaJ
@AlirezaJ我不明白請詳細說明。有沒有你連接的問題或什麼? 「這是'表明一個聲明,並且以下'與'有關'表明你想要鏈接一個問題。 – JordanZeotni