小编E.T*_*.T.的帖子

在新进程中运行时,窗口标题中的"无响应"

我有一个必须在UI线程上运行的长时间运行方法.(Devex - gridView.CopyToClipboard())

我不需要UI在复制时响应,我添加了一个启动画面,这样用户就不会觉得无聊了.

当我运行这个程序时一切都很好.

当我运行一个不同的程序时,麻烦就开始了,而这个程序又启动了一个新进程并在其上运行程序.复制几秒后标题读取(Not Responding)并且鼠标光标显示忙,它当然会在几秒钟内清除但我想摆脱它,因为它给用户误解了程序的感觉是有缺陷的.

有没有办法设置我创建的流程的"超时"?

编辑:

主程序调用以下代码:

fillsProcess = new Process();
fillsProcess.StartInfo.FileName = Application.ExecutablePath;
fillsProcess.Start();
Run Code Online (Sandbox Code Playgroud)

在fillsProcess中,当单击某个按钮时,将调用以下代码:

gridViewToCopy.CopyToClipboard();
Run Code Online (Sandbox Code Playgroud)

这行代码需要一段时间来处理,几秒钟后,fillsProcess的窗口看起来没有响应,因为此方法在UI线程上运行.

编辑第二名:

显然(并且非常可以理解)

gridViewToCopy.CopyToClipboard();
Run Code Online (Sandbox Code Playgroud)

不是导致此问题的唯一方法.许多Devex方法必须在UI线程上运行(例如,数据排序,数据过滤)

所以感谢任何提供特定解决方案的人(无论是否有效),但我原来的问题再次突然出现:

有没有办法改变超时时间或以某种方式控制整个"无响应"的惨败?

c# multithreading devexpress process winforms

13
推荐指数
1
解决办法
7004
查看次数

从Lock()内的UI线程调用方法

我有两种方法,MethodA&MethodB.MethodB必须在UI线程上运行.我需要它们一个接一个地运行而不允许MethodC它们运行.

MethodC 当用户点击一个可爱的小按钮时调用.

我做了什么来确保这是Lock围绕代码:

 lock (MyLock)
 {
   MethodA(param1, param2);

   MyDelegate del = new MyDelegate(MethodB);
   if (this.IsHandleCreated) this.Invoke(del);
 }
Run Code Online (Sandbox Code Playgroud)

并为MethodC:

public void MethodC()
 lock (MyLock)
 {
   Do bewildering stuff.....
 }
Run Code Online (Sandbox Code Playgroud)

问题是我卡住了.看起来我的代码陷入了僵局.

当我看到线程时,我看到按钮点击调用的代码被卡住lock (MyLock)MethodC,我的另一个线程似乎陷入了困境this.Invoke(del).

我已经读过从内部调用一个方法是危险的,Lock但是因为我是那个在那里编写代码的人,这似乎发生了,即使只是Thread.Sleep我认为这不是代码让我陷入困境.

为什么Invoked方法会停止工作?它是否可能等待锁定methodC被释放后再返回到它所调用的原始锁定?

c# multithreading locking invoke

4
推荐指数
1
解决办法
2860
查看次数

标签 统计

c# ×2

multithreading ×2

devexpress ×1

invoke ×1

locking ×1

process ×1

winforms ×1