当前位置: 首页 > 编程语言 > C#

分享_11116

时间:2023-04-11 00:37:52 C#

使用不带控件的调用使用不带控件的调用我有一个组件(System.ComponentModel.Component),它从另一个线程接收事件。通常我会使用这种模式在GUI线程中执行这段代码privatevoidhandle_Event(objectsender,EventArgse){varcontrol=this.Button1;如果(control.InvokeRequired)control.Invoke(()=>DoSomething());否则DoSomeThing();但是,在这种特殊情况下,我无法控制。我应该怎么办?如果将当前SynchronizationContext传递给后台线程,则可以要求它发出(begininvoke)或分派(invoke)前台线程所需的代码。这里有一个简单的LINQPad程序来演示:voidMain(){using(varfm=newForm()){varbtn=newButton();fm.Controls.Add(btn);btn.Click+=HandleClick;Thread.CurrentThread.ManagedThreadId.Dump("主线程");fm.ShowDialog();}}publicstaticvoidHandleClick(objectsender,EventArgse){varsynchronizationContext=SynchronizationContext.Current;varthread=newThread(newThreadStart(()=>BackgroundMethod(synchronizationContext)));线程。开始();}publicstaticvoidBackgroundMethod(SynchronizationContextcontext){context.Post(state=>{Thread.CurrentThread.ManagedThreadId.Dump("Invokedthread");},null);使用Dispatcher在GUI线程中运行代码...希望我的问题是正确的。privatevoidhandle_Event(objectsender,EventArgse){this.Button1.Dispatcher.Invoke(DispatcherPriority.Normal,(Action)()=>{DoSomething();});}请检查语法错误:|以上就是C#学习教程:使用invokewithoutcontrols分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: