小编And*_*ler的帖子

控制台应用在异步呼叫完成之前终止

我目前正在编写一个C#控制台应用程序,它会生成许多指向网站上不同图像的URL,然后使用下载作为字节流WebClient.DownloadDataAsync().

我的问题是,一旦进行了第一次异步调用,控制台应用程序会认为程序已完成并在异步调用返回之前终止.通过使用Console.Read()我可以强制控制台保持打开,但这似乎不是很好的设计.此外,如果用户在进程期间点击进入(当控制台正在等待输入时),程序将终止.

在等待异步调用返回时,是否有更好的方法可以阻止控制台关闭?

编辑:调用是异步的,因为我在下载过程中通过控制台向用户提供状态指示器.

c# asynchronous webclient windows-console

37
推荐指数
3
解决办法
1万
查看次数

VS 2010和2012年的TFS工作区?

我目前正在开发Visual Studio 2012 RC,使用TFS预览进行源代码管理.我想创建一个SSIS集成项目,它要求我使用Visual Studio 2010.但是,当我从VS 2010连接到TFS时,它会自动创建一个新工作区,而不会列出VS 2012工作区.

如果我tf workspaces从VS 2010命令提示符发出命令,我只看到VS 2010工作区,如果我从VS 2012命令提示符发出命令,我只看到VS 2012工作区(两者都表示正在使用相同的colleciton) .

有什么方法可以让VS 2010看到VS 2012工作区吗?我不希望有两个源代码副本只是为了能够使用VS 2010进行SSIS项目.

workspace tfs visual-studio-2010 visual-studio-2012 tfs2012

37
推荐指数
1
解决办法
2万
查看次数

是否有可能在数据库项目中使SQLCMD模式'粘滞'

我在Visual Studio 2013中有一个数据库项目,其后部署脚本使用SQLCMD模式.

我遇到的问题是每次打开项目时项目默认为非SQLCMD模式.这意味着每次打开项目时,错误列表都会出现错误,例如"语法不正确':'." 直到开发人员打开部署脚本并单击SQLCMD模式按钮.

有没有办法默认保持SQLCMD模式,所以开发人员不必每次打开项目时都这样做?

database-project visual-studio-2013

23
推荐指数
1
解决办法
5578
查看次数

C#部分类

我目前有一个多个项目的解决方案,大多使用相同的类.因此,在我看来,在解决方案中添加包含这些类的类库是一个好主意,而不是在每个项目中重复该类.

但是,我所拥有的一个项目需要一些特定于该项目的类的附加属性,并且不会在其他任何地方使用.结果,我认为我应该使用部分类来添加这些属性.所以我做了类似这样的事情:

在类库中:

namespace MyClassLibrary
{
    public partial class Book
    {
        public string Title { get; set; }
        public string AuthorLast { get; set; }
        public string AuthorFirst { get; set; }
        public string Publisher { get; set; }
        public string Edition { get; set; }
        public string ISBN10 { get; set; }
        public string ISBN13 { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

在项目中(MyProject):

namespace MyClassLibrary
{
    public partial class Book
    {
        public string AdditionalProperty { get; set; }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# class partial-classes

17
推荐指数
2
解决办法
6114
查看次数

添加类型参数约束以防止抽象类

是否可以将类型参数限制为抽象类的具体实现,如果这些实现没有默认构造函数?

例如,如果我有:

public abstract class Animal
{
    private Animal()
    {
    }

    public Animal(string name)
    {
        // ...
    }

  // ...
}


public class Penguin : Animal
{
    // ...
}


public class Chimpanzee : Animal
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我也有以下课程:

public class ZooPen<T>
   where T : Animal
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我想,让new ZooPen<Penguin>()new ZooPen<Chimpanzee>(),但我想禁止new ZooPen<Animal>().

这可能吗?

c#

11
推荐指数
2
解决办法
1859
查看次数

Java运算符优先级比较

java有内置方法来比较两个运算符的优先级吗?例如,如果我有一个char'/'和一个char'+'有一个我可以调用的方法比较两个,如果第一个大于第二个(例如是真),则返回true/false?

java

8
推荐指数
1
解决办法
8852
查看次数

谁应该负责选择合适的派生类?

我最近编写了一个类库,其中包含一些对某些类型文件进行建模的对象.例如,有一个抽象Document类,带有派生类PdfDocument(具体)和OfficeDocument(抽象,带有具体的派生类,如WordDocumentExcelDocument)等.

目前,客户端创建新对象的方式是选择适当的派生类并将其传递给字节数组.所以例如,如果我有一个PdfDocument和WordDocument的字节数组,我会做类似的事情:

var wordDocument = new WordDocument(wordDocumentByteArray);
var pdfDocument = new PdfDocument(pdfDocumentByteArray);
Run Code Online (Sandbox Code Playgroud)

这是可接受的设计,客户端必须知道要使用的派生类吗?或者我会更好地隐藏除抽象Document类之外的所有类,并使用诸如抽象工厂模式之类的东西来返回正确的派生类型?例如:

var wordDocument = DocumentFactory.GetDocument(wordDocumentByteArray, "docx");
// pass file extension so we know what the file is
Run Code Online (Sandbox Code Playgroud)

请注意,派生类型不会向抽象类添加其他属性/方法,它们只是以不同方式实现抽象方法.

c# oop class-design

8
推荐指数
1
解决办法
103
查看次数

Tridion - 从事件中放置工作流中的项目

是否可以在事件系统的工作流程中放置项目?我面临的问题是,我们希望根据它们所在的文件夹(而不是它们使用的模式)将组件定向到两个不同的工作流程,Tridion UI似乎不支持这些工作流程.我希望编写一个在签入组件时触发的事件,这样我就可以确定该组件所在的文件夹,并将其引导到事件的相应工作流程中.

我很喜欢这个活动的创作,我只是完全迷失在哪里开始,只要将项目添加到工作流程中即可.我查看了TOM.NET API文档,但实际上没有找到任何有用的东西.任何帮助或示例将不胜感激.

tridion tridion-2011

6
推荐指数
2
解决办法
159
查看次数

Tridion - 事件系统对象未被破坏

我创建了一个TcmExtension命名WorkflowEventSystem,其中有一个事件处理程序订阅了该FinishProcess事件.此事件的目的是安排发布相关工作流主题的所有依赖项(即页面).

我遇到的问题是,即使事件在正确的时间触发(工作流程完成),以及应该安排发布的所有项目,PublishScheduler事件创建的对象似乎永远不会消失范围,因此WorkflowEventSystem对象也没有.

关于事件系统如何工作会导致这些对象永远存在,我是否缺少一些东西?我已将我认为的相关代码包括在内(部分内容汇总).谢谢你的帮助.

这是大多数实际的TcmExtension:

public class WorkflowEventSystem : TcmExtension
{
    public WorkflowEventSystem()
    {
        this.Subscribe();
    }

    public void Subscribe()
    {
        EventSystem.Subscribe<ProcessInstance, FinishProcessEventArgs>(ScheduleForPublish, EventPhases.All);
    }
}
Run Code Online (Sandbox Code Playgroud)

ScheduleForPublish创建一个PublishScheduler对象(我创建的类):

private void ScheduleForPublish(ProcessInstance process, FinishProcessEventArgs e, EventPhases phase)
{
    if(phase == EventPhases.TransactionCommitted)
    {
        PublishScheduler publishScheduler = new PublishScheduler(process);
        publishScheduler.ScheduleForPublish(process);
        publishScheduler = null;  // worth a try
    }
}
Run Code Online (Sandbox Code Playgroud)

ScheduleForPublish方法看起来类似于:

public void ScheduleForPublish(ProcessInstance process)
{
    using(Session session = new Session("ImpersonationUser"))
    {
        var publishInstruction …
Run Code Online (Sandbox Code Playgroud)

tridion tridion-2011

6
推荐指数
1
解决办法
396
查看次数

TFS 2012分支 - 将Dev Dev作为主要版本

我目前在TFS中只有一个开发文件夹的解决方案:

/Dev
Run Code Online (Sandbox Code Playgroud)

我想为此解决方案实施分支策略:

/Dev
/Main
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用转换为分支功能,但是如何在新的父(主)分支和现有子(Dev)分支之间建立关系?

我不想将Dev重命名为Main,因为我想在dev分支中保留现有的签入历史记录.有没有其他方法可以做到这一点,将现有的Dev分支建立为子级,将新的Main分支建立为父级,而不必重命名Dev?

tfs branching-and-merging tfs2012

6
推荐指数
1
解决办法
8401
查看次数