![](/img/trans.png)
[英]Object property suddenly becomes null when queried with a linq statement
[英]When an object becomes a property of syncronizationContext?
我從新的winform項目開始編寫了此代碼。
public partial class Form1 : Form
{
object o = new object();
public Form1()
{
InitializeComponent();
Task t = new Task(foo);
t.Start();
Thread.Sleep(500);
Monitor.Enter(o);
}
private void foo()
{
Monitor.Enter(o);
Thread.Sleep(1000);
ActionOnUI();
Console.WriteLine("Thread End");
Monitor.Exit(o);
}
delegate void ActionOnUICrossThread();
public void ActionOnUI()
{
if (InvokeRequired)
{
this.BeginInvoke(new ActionOnUICrossThread(ActionOnUI));
}
else
{
textBox1.Text += "ab";
}
}
}
在任務運行的同時,我使用thread.sleep來停止Monitor上的mainThread。 在if(InvokeRequired)斷點的情況下,我可以看到InvokeRequired為false,我希望它為true。
如果我刪除Thread.Sleep(500); Monitor.Enter(o); 如我所料,在Form1 ctor上InvokeRequired為true。
為什么會有這種不同的行為?
Task
不是線程。 它僅表示異步操作。 任務調度程序可以將其放在線程上或保留在同一線程上。
因為您要通過Monitor.Enter(o);
阻止表單構造Monitor.Enter(o);
內部構造函數,該結構總是會失去對Monitor.Enter(o);
爭用條件Monitor.Enter(o);
foo
內部由於500毫秒的睡眠時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.