相关疑难解决方法(0)

调用任何交叉线程代码的最佳方法?

我知道之前已经问过这个问题,但我正在寻找一种方法:

  1. 简化安全交叉线程代码的创建.
  2. 在任何情况下重用此代码(没有Windows窗体引用).

这是我到目前为止,但我想删除Windows窗体引用.有任何想法吗?

public delegate void SafeInvokeDelegate(System.Action action);
public class SafeInvoke
{
    private readonly System.Windows.Forms.Control _threadControl;

    public SafeInvoke()
    {
        _threadControl = new System.Windows.Forms.Control();
    }

    public void Invoke(System.Action action)
    {
        if (_threadControl.InvokeRequired)
            _threadControl.Invoke(new SafeInvokeDelegate(Invoke), new object[] {action});
        else if (action != null) action();
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的类可能会这样使用:

SafeInvoke _safeInvoker = new SafeInvoke();
void SafeClearItems()
{
    _safeInvoker.Invoke(delegate
        {
            listView1.Items.Clear();
        });
}
Run Code Online (Sandbox Code Playgroud)

我如何删除SafeInvoke类中的System.Windows.Forms.Control但保持相同的功能?

.net c# invoke

36
推荐指数
4
解决办法
4万
查看次数

"System.InvalidOperationException:该对象目前正在其他地方使用" - 我该如何解决这个问题?

尝试更新图像时出现此错误.这是一个跨线程更新,但我使用.Invoke(),所以这不应该是问题,如果它.

c# exception invoke

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

标签 统计

c# ×2

invoke ×2

.net ×1

exception ×1