c#委托的混乱和知识的缺乏

本文关键字:知识 混乱 | 更新日期: 2023-09-27 18:07:40

我对代表感到很困惑,我的大脑要吃掉自己了。

我想连接两个不同的线程来互相做事情。但显然,"跨线程调用是不安全的"异常到处都是,要求我提供委托。我已经阅读了无数的教程,文档,示例,我只在每个示例中多死一点,因为我尝试了它,它只是不起作用

这是我的设置,以简化的,无代码的方式:

我有两个线程

.

THREAD1具有类DISPLAY_WITH_RICHTEXTBOX

这个类有一个RICH_TEXT_BOX,我将编辑它。

该类有一个方法int WRITE_TO_TEXTBOX_AND_RETURN_FEEDBACK(string Text)

.

THREAD2具有类SOME_CONTROL_PANEL

这个类有一个TEXT_BOX_OF_DOOM,里面有一些文本

这个类有一个BUTTON_OF_MAGIC,它将从另一个类调用方法来添加文本框的文本到richtextbox。在执行该方法时,该方法将返回给我一个int,其中包含富文本框文本的新总大小。

.

我的问题是,我不知道如何使这个结构最整洁。

  1. 我是否通过委托或其他方式显式地操作控件,使THREAD2升级到THREAD1,使其易于输入/输出代码
  2. 我是否调用一个方法来为我做编辑,这将使THREAD1类依赖于 THREAD2类?

以及我如何构建委托。每次我在任何地方尝试任何东西时,代码都会抱怨委托只能用于static的东西,但这对于我要创建的东西来说是非常不切实际的。我可以通过在THREAD1中创建一些变量来解决这个问题,从THREAD2中编辑它们,并让THREAD1弄清楚如何处理这些变量,因此传递来自THREAD2>THREAD1的所有交互。但这使得我的THREAD1代码如此不整洁,我想哭。

是否有另一种方式调用函数从THREAD2 -> THREAD1,这是整洁的,不涉及变量和自定义线程锁定代码厄运管理变量和东西?

我希望你能理解我的意思。

.

我只想有一个THREAD1> CLASS1>富文本框

我可以用THREAD2> CLASS2>按钮编辑所以我不编辑-任何-在THREAD1> CLASS1

我的目标是使THREAD2的东西一个完整的插件程序,使依赖只是单向的(THREAD2依赖于Thread1,没有Thread1期望它)

如果不可能使Thread1忽略Thread2,我至少可以使Thread1的参与最小化吗?

.

编辑:如果委托和其他相关的东西不是我在找什么,我在找什么,如果我想让单独的代码片段在自己的线程中运行,相互独立,但相互混淆以实现更大的目标;比如他们以任何方式编辑对方,所以1. 我开发了"类我的程序"自己运行,后来我做了一个插件2. "类我的插件"与我的程序,但它想要的混乱,而不需要回去编辑我的程序代码,以允许两个程序之间的通信。如果c#做不到,有没有一种编程语言可以做到这一点?

c#委托的混乱和知识的缺乏

这是我在表单应用程序中使用的线程之间跳转和更改UI控件

Program.MainForm.Invoke((MethodInvoker)delegate {
    //do changes here  
});'