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

如何从另一个线程调用控件方法分享

时间:2023-04-11 11:45:03 C#

如何从另一个线程调用控件方法我想从另一个线程调用RichTextBox.Find()。我怎样才能做到这一点?RichTextBox位于我在表单中使用的UserControl内。我想从另一个线程更新它。我可以使用Invoke更改其属性。但不知道如何调用_ucResultRich.rchResult.Find(word,startIndex,RichTextBoxFinds.None);从我的线程。线程线程=新线程(thrHighlight);thread.Start(e.RowIndex);privatevoidThrHighlight(objectobj){string[]words=ucSearchControls.rdbExact.Checked?新字符串[]{ucSearchControls.txtSearch.Text.Trim()}:ucSearchControls.txtSearch.Text.Split('');foreach(字符串中的单词){intstartIndex=0;while(startIndex<_ucResultRich.rchResult.TextLength){intwordStartIndex=_ucResultRich.rchResult.Find(word,startIndex,RichTextBoxFinds.None);如果(wordStartIndex!=-1){_ucResultRich.rchResult.SelectionStart=wordStartIndex;_ucResultRich.rchResult.SelectionLength=word.Length;_ucResultRich.rchResult.SelectionBackColor=Color.Yellow;否则中断;startIndex=wordStartIndex+word.Length;}}}我怎样才能做到这一点?PS:这是我第一个问题的后续问题,@varocabas在那里评论这个答案致力于展示如何正确使用(即,通过最大化其内置功能)BackgroundWorker(这是我之前在OPA上的帖子)中的一些评论的延续,以提供预期的功能。要使用这些行下面的代码,启动一个新的Winforms项目并将以下控件添加到主窗体:Button(带有单击事件Buttonbutton1的button1)、RichTextBox(richTextBox1)和BackgroundWorker(带有DoWork事件backgroundWorker1_DoWork和ProgressChangedbackgroundWorker1_DoWork事件backgroundWorker1_ProgressChanged);还要注意Form1_Load是主窗体的Load事件。要使用该应用程序,只需将包含一些硬编码单词(即“word1”、“word2”、“word3”、“word4”、“word5”)的任何文本输入到richTextBox1中,单击button1并通过按预期突出显示来确认它们。volatileintcurWordStartIndex;//我使用这个全局变量在progressChanged事件和findBit之间进行通信,从DoWork事件调用privatevoidForm1_Load(objectsender,EventArgse){backgroundWorker1.WorkerReportsProgress=true;}privateobject1_Clicksbutton(EventArgse){//就richTextBox1.TextLength引发跨线程错误而言,我将其作为参数传递backgroundWorker1.RunWorkerAsync(richTextBox1.TextLength);}privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgseint){findBit(()e.Argument);}privatevoidfindBit(inttextLength){string[]words=newstring[]{“word1”,“word2”,“word3”,“word4”,“word5”};foreach(字符串中的单词){intstartIndex=0;while(startIndex需要将代码与UI控件分离,业务逻辑在外部线程执行,更新UI控件在Dispatcher.BeginInvoke或Invoke上。例如,你可以把textbox包含的文本保存在一个单独的属性,并且在UI线程上的UI突出显示部分完成后,在不同的线程上执行查找。以上就是《C#学习教程:如何从另一个线程调用控件方法》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注---本文收集自网络,不代表立场,如涉及侵权,请指正点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢