Can I make a Binding work synchronously with a WinForms control?INotifyPropertyChanged with threadsBinding static property and implementing INotifyPropertyChangedDatabinding issue with stopwatched elapsedWhy doesn't the INotifyPropertyChanged work?How does data binding work in AngularJS?C# Winforms Custom control, binding on propertychange is not working and causing tabbing issuesWhere is body of PropertyChanged?WPF Binding not updating from DispatcherTimerWinforms data binding and INotifyPropertyChanged on monoDynamic object two way data bindingClass implementing INotifyPropertyChanged null PropertyChanged event
Security Patch SUPEE-11155 - Possible issues?
What European countries have secret voting within the Legislature?
Conference in Los Angeles, visa?
Could you fall off a planet if it was being accelerated by engines?
Let external system modify Salesforce data on behalf of logged in user
What do you call a notepad used to keep a record?
What is an entropy graph
Losing queen and then winning the game
Translation of the Sator Square
Story where diplomats use codes for emotions
Discworld quote about an "old couple" who having said everything to each other, can finally go about living their lives
The Football Squad
Why isn't UDP with reliability (implemented at Application layer) a substitute of TCP?
How did Lefschetz do mathematics without hands?
Is there a way to convert blue ice back into packed ice?
How can I know if a PDF file was created via LaTeX or XeLaTeX?
Bin Packing with Relational Penalization
How to describe POV characters?
What is an acid trap
Why were the first airplanes "backwards"?
Do the 26 richest billionaires own as much wealth as the poorest 3.8 billion people?
What is this object
Robots in a spaceship
How did they film the Invisible Man being invisible, in 1933?
Can I make a Binding work synchronously with a WinForms control?
INotifyPropertyChanged with threadsBinding static property and implementing INotifyPropertyChangedDatabinding issue with stopwatched elapsedWhy doesn't the INotifyPropertyChanged work?How does data binding work in AngularJS?C# Winforms Custom control, binding on propertychange is not working and causing tabbing issuesWhere is body of PropertyChanged?WPF Binding not updating from DispatcherTimerWinforms data binding and INotifyPropertyChanged on monoDynamic object two way data bindingClass implementing INotifyPropertyChanged null PropertyChanged event
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
Related: https://stackoverflow.com/a/17451872/3485263
I have a class which implements INotifyPropertyCHanged
. Several instances of System.Windows.Forms.Binding
exist which bind its properties to those of some Controls in a Windows Forms application.
public class Device : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string property_name)
if (PropertyChanged != null) // if there are any subscribers
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(property_name));
public bool connected get; set;
...
The binding occurs in the form class as follows:
button_Reboot.DataBindings.Add("Enabled", _device, "connected", false,
DataSourceUpdateMode.Never);
The problem with this code is that the OnPropertyChanged
handler and the form code appear to be working in different threads. This is because the _device
is subscribed to the events of an encapsulated SerialPort
instance and updates its properties on events raised by the serial port, which appears to be happening in another thread. So I get the InvalidOperationException
saying that the control is accessed from a thread other than the thread it was created on.
I changed my code according to this answer. The comments to that answer contain the description of my issue as well.
void OnPropertyChanged(string property_name)
var handler = PropertyChanged;
if (handler != null)
var e = new PropertyChangedEventArgs(property_name);
foreach (PropertyChangedEventHandler h in handler.GetInvocationList())
var synch = h.Target as ISynchronizeInvoke;
if (synch != null && synch.InvokeRequired)
synch.Invoke(h, new object[] this, e );
else
h(this, e);
The author of that answer expected h.Target
to be a Control
, but in my case it turns out to be a System.ComponentModel.ReflectPropertyDescriptor
, some Runtime type which I observed during debugging. That type does not implement ISynchronizeInvoke
and this causes synch
to be null
, which leads to the exception being thrown anyway because the control method is just called directly instead of being invoked synchronously.
My question is whether I can make my OnPropertyChanged
handler access the Control's PropertyChangedEventHandler
using the Control's ISynchronizeInvoker
interface. I target .NET 4.6.2 and I'm using Visual Studio 2013.
c# .net winforms data-binding
add a comment |
Related: https://stackoverflow.com/a/17451872/3485263
I have a class which implements INotifyPropertyCHanged
. Several instances of System.Windows.Forms.Binding
exist which bind its properties to those of some Controls in a Windows Forms application.
public class Device : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string property_name)
if (PropertyChanged != null) // if there are any subscribers
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(property_name));
public bool connected get; set;
...
The binding occurs in the form class as follows:
button_Reboot.DataBindings.Add("Enabled", _device, "connected", false,
DataSourceUpdateMode.Never);
The problem with this code is that the OnPropertyChanged
handler and the form code appear to be working in different threads. This is because the _device
is subscribed to the events of an encapsulated SerialPort
instance and updates its properties on events raised by the serial port, which appears to be happening in another thread. So I get the InvalidOperationException
saying that the control is accessed from a thread other than the thread it was created on.
I changed my code according to this answer. The comments to that answer contain the description of my issue as well.
void OnPropertyChanged(string property_name)
var handler = PropertyChanged;
if (handler != null)
var e = new PropertyChangedEventArgs(property_name);
foreach (PropertyChangedEventHandler h in handler.GetInvocationList())
var synch = h.Target as ISynchronizeInvoke;
if (synch != null && synch.InvokeRequired)
synch.Invoke(h, new object[] this, e );
else
h(this, e);
The author of that answer expected h.Target
to be a Control
, but in my case it turns out to be a System.ComponentModel.ReflectPropertyDescriptor
, some Runtime type which I observed during debugging. That type does not implement ISynchronizeInvoke
and this causes synch
to be null
, which leads to the exception being thrown anyway because the control method is just called directly instead of being invoked synchronously.
My question is whether I can make my OnPropertyChanged
handler access the Control's PropertyChangedEventHandler
using the Control's ISynchronizeInvoker
interface. I target .NET 4.6.2 and I'm using Visual Studio 2013.
c# .net winforms data-binding
add a comment |
Related: https://stackoverflow.com/a/17451872/3485263
I have a class which implements INotifyPropertyCHanged
. Several instances of System.Windows.Forms.Binding
exist which bind its properties to those of some Controls in a Windows Forms application.
public class Device : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string property_name)
if (PropertyChanged != null) // if there are any subscribers
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(property_name));
public bool connected get; set;
...
The binding occurs in the form class as follows:
button_Reboot.DataBindings.Add("Enabled", _device, "connected", false,
DataSourceUpdateMode.Never);
The problem with this code is that the OnPropertyChanged
handler and the form code appear to be working in different threads. This is because the _device
is subscribed to the events of an encapsulated SerialPort
instance and updates its properties on events raised by the serial port, which appears to be happening in another thread. So I get the InvalidOperationException
saying that the control is accessed from a thread other than the thread it was created on.
I changed my code according to this answer. The comments to that answer contain the description of my issue as well.
void OnPropertyChanged(string property_name)
var handler = PropertyChanged;
if (handler != null)
var e = new PropertyChangedEventArgs(property_name);
foreach (PropertyChangedEventHandler h in handler.GetInvocationList())
var synch = h.Target as ISynchronizeInvoke;
if (synch != null && synch.InvokeRequired)
synch.Invoke(h, new object[] this, e );
else
h(this, e);
The author of that answer expected h.Target
to be a Control
, but in my case it turns out to be a System.ComponentModel.ReflectPropertyDescriptor
, some Runtime type which I observed during debugging. That type does not implement ISynchronizeInvoke
and this causes synch
to be null
, which leads to the exception being thrown anyway because the control method is just called directly instead of being invoked synchronously.
My question is whether I can make my OnPropertyChanged
handler access the Control's PropertyChangedEventHandler
using the Control's ISynchronizeInvoker
interface. I target .NET 4.6.2 and I'm using Visual Studio 2013.
c# .net winforms data-binding
Related: https://stackoverflow.com/a/17451872/3485263
I have a class which implements INotifyPropertyCHanged
. Several instances of System.Windows.Forms.Binding
exist which bind its properties to those of some Controls in a Windows Forms application.
public class Device : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string property_name)
if (PropertyChanged != null) // if there are any subscribers
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(property_name));
public bool connected get; set;
...
The binding occurs in the form class as follows:
button_Reboot.DataBindings.Add("Enabled", _device, "connected", false,
DataSourceUpdateMode.Never);
The problem with this code is that the OnPropertyChanged
handler and the form code appear to be working in different threads. This is because the _device
is subscribed to the events of an encapsulated SerialPort
instance and updates its properties on events raised by the serial port, which appears to be happening in another thread. So I get the InvalidOperationException
saying that the control is accessed from a thread other than the thread it was created on.
I changed my code according to this answer. The comments to that answer contain the description of my issue as well.
void OnPropertyChanged(string property_name)
var handler = PropertyChanged;
if (handler != null)
var e = new PropertyChangedEventArgs(property_name);
foreach (PropertyChangedEventHandler h in handler.GetInvocationList())
var synch = h.Target as ISynchronizeInvoke;
if (synch != null && synch.InvokeRequired)
synch.Invoke(h, new object[] this, e );
else
h(this, e);
The author of that answer expected h.Target
to be a Control
, but in my case it turns out to be a System.ComponentModel.ReflectPropertyDescriptor
, some Runtime type which I observed during debugging. That type does not implement ISynchronizeInvoke
and this causes synch
to be null
, which leads to the exception being thrown anyway because the control method is just called directly instead of being invoked synchronously.
My question is whether I can make my OnPropertyChanged
handler access the Control's PropertyChangedEventHandler
using the Control's ISynchronizeInvoker
interface. I target .NET 4.6.2 and I'm using Visual Studio 2013.
c# .net winforms data-binding
c# .net winforms data-binding
asked Mar 25 at 14:55
John AshpoolJohn Ashpool
258 bronze badges
258 bronze badges
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55340629%2fcan-i-make-a-binding-work-synchronously-with-a-winforms-control%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Is this question similar to what you get asked at work? Learn more about asking and sharing private information with your coworkers using Stack Overflow for Teams.
Is this question similar to what you get asked at work? Learn more about asking and sharing private information with your coworkers using Stack Overflow for Teams.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55340629%2fcan-i-make-a-binding-work-synchronously-with-a-winforms-control%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown