我有一个相当良好的多线程WinForms应用程序,其使用所述的EventWaitHandle在一些地方同步访问。

因此,我具有类似于这个代码:

List<int> _revTypes;
EventWaitHandle _ewh = new EventWaitHandle(false, EventResetMode.ManualReset);

void StartBackgroundTask() {
    _ewh.Reset();
    Thread t = new Thread(new ThreadStart(LoadStuff));
    t.Start();
}

void LoadStuff() {
    _revTypes = WebServiceCall.GetRevTypes()
    // ...bunch of other calls fetching data from all over the place
    // using the same pattern
    _ewh.Set();
}


List<int> RevTypes {
    get {
        _ewh.WaitOne();
        return _revTypes;
    }
}

然后我刚刚从UI调用.RevTypes somewehre当LoadStuff执行完毕,将返回的数据给我。

这一切完美的作品正确,但是RevTypes只是一个属性 - 居然有几十这些。和一个或几个属性都阻碍了正常加载UI以快速的方式。

将基准码到每个属性的短,是有办法以查看哪个属性是从保持加载UI?有没有办法看到的EventWaitHandle是否被强制实际等待?

有帮助吗?

解决方案

我不知道是什么,以及如何你想实现的,但你可以通过与WaitHandle的超时0s周期,看看它们目前被设置,如:

class Program
{
    static void Main(string[] args)
    {
        EventWaitHandle[] waitHandles = new EventWaitHandle[3];
        for (int i = 0; i < 3; i++)
        {
            waitHandles[i] = new EventWaitHandle(false, EventResetMode.ManualReset);
        }
        waitHandles[1].Set();

        for (int i = 0; i < 3; i++)
        {
            if (waitHandles[i].WaitOne(0))
            {
                Console.WriteLine("Handle {0} is set", i);
            }
            else
            {
                Console.WriteLine("Handle {0} is not set", i);
            }
        }
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top