devamlı değildir, OnShown
geçersiz kılma (veya Shown
olayı işleyicisinin) içerisinde CallContext
için yapılan herhangi bir değişiklik, bir olay sonra kaybolur. Örneğin, aşağıdaki kodda, forma çift tıklandığında, 'Başlıyor!' verilerde aslında 'Merhaba, Dünya!' form gösterildiğinde.değişiklikler bir <code>System.Windows.Forms.Form</code> olarak
Geçersiz kılma, OnShown
yerine OnLoad
'a uygulanırsa, çift tıklatıldığında iletinin beklendiği gibi gösterilir ('Merhaba, Dünya!').
...
using System.Runtime.Remoting.Messaging;
...
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
CallContext.SetData("Message", "Starting Up!");
}
public string Message
{
get
{
return CallContext.GetData("Message") as string;
}
}
protected override void OnShown(EventArgs e)
{
CallContext.SetData("Message", "Hello, World!");
base.OnShown(e);
}
protected override void OnDoubleClick(EventArgs e)
{
this.Text = this.Message;
base.OnDoubleClick(e);
}
}
Birisi bu davranışın nedenini açıklayabilir mi? (Ya da sadece benim PC, o kendi şeyler yapıyor nedir?)
Bu 4.6.1 (Visual Studio 2015), Windows 7 x64 de .Net Framework denendi; Hedef Platform x86'dır (x64 veya AnyCPU ile şans yok); [STAThread]
, Main()
'a uygulanır.
Davranış normaldir. Form.BeginInvoke işlevini kullanarak bir yöntem çağırdığınızda, yöntemi çalıştırmak için yakalanan bir 'ExecutionContext' kullanır ve 'CallContext' içinde yaptığınız değişiklikler bundan sonra görünmez. Eğer 'Form' için kaynak koduna bakarsanız, '' OnShown' '' 'OnLoad' '' (http://referencesource.microsoft) içinde' BeginInvoke' kullanılarak çağrılan 'CallShownEvent' yönteminde çağrılır. com/# System.Windows.Forms/winforms/Managed/System/WinForms/Form.cs, 4906) 'CallContext' yönteminde yapılan değişiklikler, 'OnShown' yöntemine yereldir ve geçerli bağlamda görünmez. –
@ reza-aghaei Anladım; teşekkür ederim ... Bu cevap ... 'OnLoad' sonunda CallShownEvent için' BeginInvoke' özledim ... – Raje