在.Net中托管多个线程的控制

时间:2013-09-04 13:50:54

标签: c# .net multithreading winforms controls

我有一个问题,三天后我仍然找不到答案。

我正在创建一个usercontrol。此控件上有两个托管控件。一个是编辑字段,另一个是保留行号和其他用户添加内容的边距。

我要做的是将它们实例化为在自己的线程中分离控件,并在这些线程上执行所有任务,例如绘制和更新。 usercontrol线程将简单地过滤消息并将其指向正确的控件。我将通过重写WndProc方法来做到这一点。

做我所知的所有消息,但是如何实例化控件。一旦创建这些控件的线程完成,线程就不会死,控件变得无法访问。对不起目前没有代码,我倾向于在任何编码之前进行大量研究,但我似乎找不到任何可以帮助的东西。

1 个答案:

答案 0 :(得分:1)

这不会很好。所有UI元素(表单,控件等)都具有线程关联性要求,这些要求规定只能从创建它们的线程访问它们。试图在另一个控件中的另一个控件中嵌入一个托管在一个线程上的控件是徒劳的。即使你可以使它工作(并且在这里松散地使用术语“工作”),结果可能是不可预测的。你需要重新思考你的方法。在同一个线程上托管所有控件然后将任何耗时的操作传递给工作线程会更好更多。请记住,只保留工作线程忙于非UI相关操作。一旦操作完成,您就可以将结果编组到UI线程,在那里它可以适当地分配给控件。