引发事件,以便在与原始订阅者相同的线程上处理它们

时间:2010-09-10 22:05:20

标签: multithreading events .net-4.0 c#-4.0 event-handling

在使用C#4.0的dotNET中,我如何确保在任意线程X上发生的事件将在与订阅线程A,B或C相同的线程(或同步上下文)中调用处理程序。

我试图避免将与线程相关的代码放入处理程序方法或事件站点。

如果我不必更改+ =和 - =订阅以及“公共事件EventHandler myevent”,那将是非常好的。代码。

2 个答案:

答案 0 :(得分:1)

我不认为你可以直接这样做。您可以做的最好的是注册处理程序,它将在某个任意线程上运行,但会将数据传递给原始线程。

答案 1 :(得分:0)

目前可以使用object CountriesTypeFactory : TypeAdapterFactory { override fun <T : Any?> create(gson: Gson?, type: TypeToken<T>?): TypeAdapter<T>? { val delegate = gson?.getDelegateAdapter(this, type) val elementAdapter = gson?.getAdapter(JsonElement::class.java) return object : TypeAdapter<T>() { @Throws(IOException::class) override fun write(outjs: JsonWriter, value: T) { delegate?.write(outjs, value) } @Throws(IOException::class) override fun read(injs: JsonReader): T { var jsonElement = elementAdapter!!.read(injs) if (jsonElement.isJsonObject) { val jsonObject = jsonElement.asJsonObject if (jsonObject.has("countries") && jsonObject.get("countries").isJsonArray) { jsonElement = jsonObject.get("countries") } } return delegate!!.fromJsonTree(jsonElement) } }.nullSafe() } } 和async / await的默认行为结合使用,将事物带回调用同步上下文。