当前位置:编程学习 > C#/ASP.NET >>

c# DragDrop 注册失败

 report.Preview(); 在打印预览这里报次错误,请高手指教。

 [STAThread]     着个加过,不这里问题
        static void Main()  --------------------编程问答--------------------  请高手指点一下啊 --------------------编程问答-------------------- 怎么没有人啊 --------------------编程问答-------------------- 是否是对事件声明部分的内容作了修改,建议重新创建这个事件

或者

1,有加了[STAThread] 还是出错
static void Main() 

2,在主窗体中的Timer的事件中调用下面的代码然后报错
frmdata.ShowDialog();--->提示"DragDrop 注册失败

3,我的做法是:frmdata.ShowDialog(this);//this就是我的主窗体

4,frmdata.ShowDialog(this)也会出现错误不过不是DragDrop 注册失败,而是跨线程操作窗体对象的错误。

5,使用线程安全来调用frmdata.ShowDialog(this)。

下面来看具体的代码:
因为是Timer的事件中来调用frmdata.ShowDialog(this),所以会出现线程间的错误。
这里再用线程安全的方法就可以解决了。
        #region 线程安全
        private delegate DialogResult FormDelegate(object msg, object form);
        public DialogResult ThreadSafeWay(object msg, object form)
        {
            FormDelegate controlDelegate = new FormDelegate(ThreadSafeWay);
            if ((this as Form).InvokeRequired)
            {
                return (DialogResult)(this as Form).Invoke(controlDelegate,new object[]{ msg, form });
            }
            else
            {
                return (form as Form).ShowDialog(this);
            }
        }
        #endregion
现在把原来的代码:
frmdata.ShowDialog();
改成:ThreadSafeWay(null, frmdata);
就可以了。
--------------------编程问答--------------------
引用 3 楼 hefeng_aspnet 的回复:
是否是对事件声明部分的内容作了修改,建议重新创建这个事件

或者

1,有加了[STAThread] 还是出错
static void Main() 

2,在主窗体中的Timer的事件中调用下面的代码然后报错
frmdata.ShowDialog();--->提示"DragDrop 注册失败

3,我的做法是:frmdata.ShowDialog(this);//this就是……


你好着是处理窗口调用线程处理,我现在是打印预览的时候就出现这种问题。该怎么调用 --------------------编程问答-------------------- ??在线等啊,急,求救,高手帮帮忙 --------------------编程问答-------------------- 没有人知道着个问题吗? --------------------编程问答-------------------- 我去啊,楼主跟我碰到的问题一样,我也没解决呢,帮忙顶起
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,