Zugriff auf GUI Controls.
-
Hi,
Wie sollte man am besten vorgehen wenn man Zugriff auf die GUI Controls von anderen Threads aus braucht? Zurzeit mach ich es so.. aber bei sehr vielen controls macht das nicht wirklich spaß.. Hat jemand 'ne andere idee?
public void AddLog(string msg) { if (InvokeRequired) { object[] pList = { msg }; logMsg.BeginInvoke(new UpdateCallback(OnUpdateRichEdit), pList); } else { OnUpdateRichEdit(msg); } } private void OnUpdateRichEdit(string msg) { logMsg.AppendText(msg); logMsg.AppendText("\n"); }
-
-
theta schrieb:
Sehr shick, danke! Erspart mir viel arbeit.
-
Um.. Leider funktioniert es nicht für ToolStrip Controls..
The type 'System.Windows.Forms.ToolStripComboBox' cannot be used as type parameter 't' in the generic type or method 'myApp.CrossThreadUtility.InvokeControlAction<t>(t, System.Action<t>)'. There is no implicit reference conversion from 'System.Windows.Forms.ToolStripComboBox' to 'System.Windows.Forms.Control'
-
Ja, dann pass es doch an um Himmelswillen...
-
theta schrieb:
Ja, dann pass es doch an um Himmelswillen...
Hab ich versucht..
public static void InvokeStripAction<t>(t cont, Action<t> action) where t : ToolStripComboBox { if (cont.InvokeRequired) { cont.Invoke(new Action<t, Action<t>>(InvokeStripAction), new object[] { cont, action }); } else { action(cont); } }
CrossThreadUtility.InvokeStripAction<ToolStripComboBox>(foocombo, lbl => lbl.Items.Add(charname));
error CS1061: 't' does not contain a definition for 'InvokeRequired' and no extension method 'InvokeRequired' accepting a first argument of type 't' could be found (are you missing a using directive or an assembly reference?) error CS1061: 't' does not contain a definition for 'Invoke' and no extension method 'Invoke' accepting a first argument of type 't' could be found (are you missing a using directive or an assembly reference?)
-
Du kannst das Invoke von deiner Form nehmen.
Simon
-
theta schrieb:
Du kannst das Invoke von deiner Form nehmen.
SimonDanke! Klappt.