更新:只是总结一下我的问题归结为:
我希望构建.NET表单和控件不会创建任何窗口句柄 - 希望该过程被延迟到Form.Show/Form.ShowDialog
任何人都可以确认或否认这是否属实?
我有一个带有选项卡控件的大型WinForms表单,表单上有许多控件,在加载几秒钟时会暂停.我已经将它缩小到InitializeComponent中设计器生成的代码,而不是构造函数或OnLoad中的任何逻辑.
我很清楚我不能尝试在主UI线程以外的任何线程上与UI交互,但我想做的是让应用程序预先加载这个表单(运行构造函数)在后台,所以只要用户想要打开它,就可以立即在UI线程上显示.但是,在后台线程中构建时,在设计器的这一行:
this.cmbComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
Run Code Online (Sandbox Code Playgroud)
我收到了错误
在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式.确保您的Main函数标记了STAThreadAttribute.
现在,这是设计器文件的一半,这让我希望通常这种策略可行.但是这条特殊的线似乎试图立即启动某种OLE调用.
有任何想法吗?
编辑:
我想我不是在这里说清楚.延迟似乎发生在设计人员生成的代码期间构建bazillion控件期间.
我希望所有这些初始化代码都是在没有实际尝试触摸任何真正的Win32窗口对象的情况下发生的,因为表单尚未实际显示.
我可以设置(例如)标签文本和位置来自这个后台线程的事实让我希望这是真的.然而,对于所有房产而言可能并非如此.
我正在设置一个php项目,但我不太熟悉如何正确使用php的include/require命令.我的布局目前看起来像这样:
/public --apache points into this directory
/public/index.php
/public/blah/page.php
/utils/util1.php -- useful classes/code are stored in other directories out here
/dbaccess/db1.php
dbaccess/db1.php
require '../utils/util1.php
Run Code Online (Sandbox Code Playgroud)
公共/ index.php文件
require '../dbaccess/db1.php'
Run Code Online (Sandbox Code Playgroud)
公共/胡说/ page.php文件
require '../../dbaccess/db1.php'
Run Code Online (Sandbox Code Playgroud)
问题来自php'include'文档:
如果filename以./或../开头,则仅在当前工作目录中查找
所以public/blah/page.php失败了,因为它包含dbaccess/db1.php,它在尝试包含util1.php时会爆炸.它失败了,因为它的相对路径来自public/blah /中的原始脚本,而不是来自dbaccess /
这看起来非常愚蠢 - db1.php必须知道它被包含在哪里不起作用.
我见过这样的策略:
require_once dirname(__FILE__) . '/../utils/util1.php');
Run Code Online (Sandbox Code Playgroud)
这显然是有效的,因为现在这条道路是绝对的道路,但对我来说似乎真的很奇怪.
这是正常的吗?我应该继续沿着这条路走下去,还是我错过了一些明显的东西?
我在Windows 7中正在使用相同的任务栏图标组合两个应用程序,如此问题中所述:
我在那里看到了很多在线文档,我需要将AppUserModelID设置为快捷方式的属性.我的安装程序使用基本的Visual Studio 2008安装项目,我没有看到任何方法在安装时设置快捷方式属性.是否有任何人可以告诉我如何做到这一点?
我正在寻找帮助为Visual Studio中的继承控件设置新的默认属性值:
class NewCombo : System.Windows.Forms.ComboBox
{
public NewCombo() { DropDownItems = 50; }
}
Run Code Online (Sandbox Code Playgroud)
问题是基类属性DropDownItems
上设置了一个'default'属性,它是一个不同的值(不是50).因此,当我将控件拖到窗体上时,设计器文件会显示一条显式mycontrol.DropDownItems = 50;
行.
起初,这没关系.但是如果稍后我将继承的类更改DropDownItems = 45;
为构造函数,则不会影响任何表单上的任何控件,因为所有这些设计器文件仍然具有其中的硬编码值50.而重点是将价值设定在一个地方,这样我就可以与顾客改变主意.
显然,如果我在子类中创建自己的自定义属性,我可以给它自己设计的默认属性,无论我想要什么.但是在这里我想要更改基础中属性的默认值.有没有办法将Visual Studio属性应用于基类成员?或者是否有其他解决方法来获得我想要的结果?
我正在努力清理大型代码库中的错误,其中没有人关注本地时间与UTC时间.
我们想要的是一种全局忽略发送到ASP.NET Web服务和从ASP.NET Web服务发送的DateTime对象的时区信息的方法.我有一个检索操作的解决方案.数据仅在数据集中返回,我可以查找DateTime列并将DateTimeMode设置为Unspecified.这解决了我在数据集内来回传递的所有数据的问题.
但是,DateTime对象也经常作为参数直接传递给Web方法.我想剥离任何传入的时区信息.而不是通过我们的客户端代码搜索和使用DateTime.SpecifyKind(..)来设置所有的DateTime瓦尔为undefined,我想要做某种全球ASP.NET覆盖的监控传入的参数,并剥离出时区信息.
这样的事情可能吗?或者还有另一种更简单的方法来做我想做的事情吗?
只是重申 - 我不关心时区,每个人都处于同一时区.但一对夫妇的用户已经严重的机器配置,错时区等,所以当他们在2008年7月1日,发送,我收到2008年6月30日22:00:00在服务器端它会自动从转换它自己本地时间到服务器的本地时间.
更新:另一种可能性是,如果可以在客户端.NET代码上进行更改,以更改具有Kind'Undefined'的DateTime对象的序列化方式.
我正在开发一个项目,更新他们的WinForms应用程序UI,使其与大小更加一致.默认情况下,TextBox和ComboBox控件具有不同的高度,即使使用相同的字体也是如此.我已经能够通过关闭自动调整大小来调整文本框,但文本还死守着控制的上方,下方留下一个缺口.
有没有办法在控件中垂直居中文本?
我正在使用WCF IErrorHandler接口来捕获和记录WCF服务的服务器端的错误.但是,传递给HandleError和ProvideFault的异常的StackTrace搞砸了:
at System.ServiceModel.Dispatcher.TaskMethodInvoker.InvokeEnd(Object instance,Object []&outputs,IAsyncResult result)at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeEnd(MessageRpc&rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage7(MessageRpc&rpc) )......还有更多
我在堆栈跟踪中看到随机的Dispatcher方法并不奇怪,但我假设我会在堆栈顶部看到自己的方法.
我已经确定这只会发生在看起来像的操作上
[OperationContract]
public Task<int> MyOperation()
{
throw new ApplicationException("test");
}
Run Code Online (Sandbox Code Playgroud)
看起来像这样的服务有一个适当的堆栈跟踪供我记录:
[OperationContract]
public int MySyncOperation()
{
throw new ApplicationException("test");
}
Run Code Online (Sandbox Code Playgroud)
作为一个FYI,这是错误处理程序方法的样子:
public class MyErrorHandler : IErrorHandler
{
public bool HandleError(Exception error)
{
//variable 'error' has wrong stack trace if exception sourced from Task<int> operation
return false;
}
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
//variable 'error' has wrong stack trace if exception sourced from Task<int> operation …
Run Code Online (Sandbox Code Playgroud) 我正在编写.NET 3.5应用程序,并且可以控制WCF服务和客户端.
我正在使用svcutil为我的服务生成代理类,因为它们共享数据类型,所以组合了多个服务.
svcutil /out:ServiceReference.cs /noconfig /namespace:*,Global.ServiceReference
/tcv:Version35 http://localhost:12345/first.svc http://localhost:12345/second.svc
Run Code Online (Sandbox Code Playgroud)
更严重的问题是错误 - 我有一个类被创建两次,导致很多"Global.ServiceReference.MyClass.MyField'和'Global.ServiceReference.MyClass.MyField'"错误之间的歧义.请注意,目前,此类仅在其中一个服务中引用,但将来会引用更多.
这两个生成的类看起来像:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="MyClass", Namespace="http://schemas.datacontract.org/2004/07/MyService.Util")]
public partial class MyClass : object, System.Runtime.Serialization.IExtensibleDataObject
{
//fields
}
Run Code Online (Sandbox Code Playgroud)
和
[System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "3.0.4506.2152")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.datacontract.org/2004/07/MyService.Util")]
public partial class MyClass
{
// same fields
}
Run Code Online (Sandbox Code Playgroud)
基于应用于它们的属性,这与DataContractSerializer与XmlSerializer有关,但我真的不明白这些是什么意思.
第二个问题是,svcutil提供了大量警告:
Error: There was a validation error on a schema generated during export:
Source:
Line: 1 Column: 10415
Validation Error: The simpleType 'http://schemas.microsoft.com/2003/10/Serialization/:guid' has already been declared.
Run Code Online (Sandbox Code Playgroud)
即使有两个非常简单的服务,也会发生这些错 例如,如果服务#1有
[OperationContract]
public string test(int test) …
Run Code Online (Sandbox Code Playgroud) 我有这个工作:
<Button Content="{StaticResource SaveImage}" />
Run Code Online (Sandbox Code Playgroud)
但现在我想让按钮变得更复杂一些
<Button>
<Button.Content>
<StackPanel Orientation="Horizontal" >
{StaticResource SaveImage} <!-- WHAT GOES HERE?? -->
<Label>Save</Label>
</StackPanel>
</Button.Content>
</Button>
Run Code Online (Sandbox Code Playgroud)
如何将图像资源放在xml树中,而不是仅将其分配给Button类的属性?
注意,资源定义如下:
<Image x:Key="SaveImage" x:Shared="False" Source="Save.png" Height="16" Width="16"/>
Run Code Online (Sandbox Code Playgroud) 我正在研究F#的基础知识,我仍然处于不确定可能性或可用性的地步.我认为应该有更好的方法来做到这一点:
我正在查看使用此代码添加类型保护的常见演示场景
type CustomerId = CustomerId of int
type OrderId = OrderId of int
Run Code Online (Sandbox Code Playgroud)
在某些时候,我有需要解包整数的持久性代码:
dbcmd.Execute(CID = ???, OID = ???)
Run Code Online (Sandbox Code Playgroud)
选项A:笨重但有效
dbcmd.Execute(CID = match CustomerId with (CustomerId cid) -> cid, OID = match OrderId with (OrderId oid) -> oid)
Run Code Online (Sandbox Code Playgroud)
选项B源自F#中单个案例区分联合的简明模式匹配中的答案
这需要2行,如果有4或5件事要解开,我开始真的不喜欢let
声明左右之间的"距离" - 我最终可能会输入一些乱序
let (CustomerId cid, OrderId oid) = (CustomerId, OrderId)
dbcmd.Execute(CID = cid, OrderId = oid)
Run Code Online (Sandbox Code Playgroud)
选项C:如果没有更好的选择,这可能是我更喜欢的.很明显,但消耗的垂直空间比我希望的要多
let (CustomerId cid) = CustomerId
let (OrderId oid) = OrderId
dbcmd.Execute(CID = cid, OrderId = oid)
Run Code Online (Sandbox Code Playgroud)
选项D:这是我希望存在的一种.这实际上不起作用,因为这是包装的语法,而不是解包,但你明白了 …