我正在尝试在C#(VS2008)中创建一个winform应用程序,它可以加载一个mp3(其他格式会很好,但至少是mp3)并能够调整播放速度(速度)而不影响音高.我真的不需要任何其他音频效果.我尝试使用DirectShow,但似乎没有提供时间拉伸功能.我能够加入irrklang,但似乎没有时间伸展能力.所以现在我转到了SoundTouch.这肯定有能力,但我不清楚如何在C#中实现.
几天之后,我所做的就是在SoundTouch DLL上使用DLLImport,并且能够成功检索版本号.在这一点上,我甚至不确定我是否可以做我正在尝试使用SoundTouch做的事情.任何人都可以提供一些关于如何实现SoundTouch或具有我正在寻找的功能的不同库的指导?谢谢.
使用php 5.2,我正在尝试使用工厂将服务返回给控制器.我的请求uri的格式为www.mydomain.com/service/method/param1/param2/etc.然后我的控制器将使用uri中发送的令牌调用服务工厂.从我所看到的情况来看,我的工厂有两条主要路线可供选择.
单一方法:
class ServiceFactory {
public static function getInstance($token) {
switch($token) {
case 'location':
return new StaticPageTemplateService('location');
break;
case 'product':
return new DynamicPageTemplateService('product');
break;
case 'user'
return new UserService();
break;
default:
return new StaticPageTemplateService($token);
}
}
}
Run Code Online (Sandbox Code Playgroud)
或多种方法:
class ServiceFactory {
public static function getLocationService() {
return new StaticPageTemplateService('location');
}
public static function getProductService() {
return new DynamicPageTemplateService('product');
}
public static function getUserService() {
return new UserService();
}
public static function getDefaultService($token) {
return new StaticPageTemplateService($token);
}
}
Run Code Online (Sandbox Code Playgroud)
所以,考虑到这一点,我将有一些通用服务,我将传递该令牌(例如,StaticPageTemplateService和DynamicPageTemplateService),它可能会实现另一个工厂方法,就像这样来获取模板,域对象等等.将是特定服务(例如,UserService),它将是该令牌的1:1而不会被重用.因此,对于少量服务而言,这似乎是一种不错的方法(如果不是,请提供建议).但是,随着时间的推移,随着时间的推移和我的网站的增长,我最终会有100种可能性.这似乎不再是一个好方法.我只是开始使用或者是否有其他更适合的设计模式?谢谢. …
这最终将成为更大表达式的一部分,但我已将其简化为更简单的形式(即,将有40个字符的真实可能性而不是此处的19个字符).鉴于以下输入:
;123?T
Run Code Online (Sandbox Code Playgroud)
我与这个正则表达式成功匹配:
^(?:;(\d{0,19})\?.){1,40}$
Run Code Online (Sandbox Code Playgroud)
但是,我没有得到这个正则表达式的匹配:
^(?:;(\d{0,19})\?.){3,40}$
Run Code Online (Sandbox Code Playgroud)
我唯一要改变的是最小长度,输入应该满足这两个长度.为什么第一个找到匹配而第二个找不到?也许我只是不理解这个量词,但我认为它只是{MIN,MAX}.
另外,我在以下两个在线测试人员中测试了这个:
我正在使用 VS 2022,并且有一个针对框架 4.5 到 .net 6 的 ac# 库。我有一个针对该库的 MS 测试项目。我大量使用动态数据,最近注意到并非所有测试数据都出现在测试结果中。我已将令人讨厌的问题分解为尽可能小的问题,以证明我所看到的内容。
如果我在 HasExpectedItems2() 中放置一个断点并调试测试,我会看到它达到了 3x,索引分别为 0、1、2,正如我所期望的那样。但是,如果我在 HasExpectedItems1() 中放置一个断点并调试测试,它只会命中 2x,并且 items 分别包含 3 个项目和 null。我没有看到项目包含 0 个项目,这应该是数据行之一。如果我注释掉 DumbItems 中的第三个列表(其中包含 3 个对象),HasExpectedItems1() 仍然会命中 2x,并且 items 包含 0 个项目,并且分别为 null,如预期的那样。所以它看起来有一个填充列表,它以某种方式忽略了空列表。几天来我一直在试图解决这个问题,但我对这里发生的事情感到完全困惑。
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Microsoft.VisualStudio.TestTools.UnitTesting;
#if NET45_OR_GREATER
using System.Web.Mvc;
#elif NETCOREAPP3_0_OR_GREATER
using Microsoft.AspNetCore.Mvc.Rendering;
#endif
[TestClass]
[ExcludeFromCodeCoverage]
public class StaticTestingUnitTests
{
protected static readonly IEnumerable<SelectListItem>[] DumbItems = new IEnumerable<SelectListItem>[]
{
null,
new List<SelectListItem>(),
new List<SelectListItem>
{
new SelectListItem { Text = "One", …Run Code Online (Sandbox Code Playgroud) 任何人都可以指出我为什么我的XSD中的独特元素不强制独特性?这应该抛出一个错误,因为最后一个ScreenResult元素不包含该Type属性的唯一值.我还应该注意到,我真正强迫其中一个Type内部ScreenResults(ScreenResult需要存在3次,有3种类型的屏幕,我需要独特性)所以如果有更好的方法来实现这一点,我'也是为了这一切.
谢谢.
这是我的XML片段:
<ScreenResults>
<ScreenResult Type="Screen Type A">1</ScreenResult>
<ScreenResult Type="Screen Type B">1</ScreenResult>
<ScreenResult Type="Screen Type B">2</ScreenResult>
</ScreenResults>
Run Code Online (Sandbox Code Playgroud)
这是我的XSD片段(还要注意我的原始XSD片段跨越多个文件,但我已经验证了我的所有命名空间都是正确的):
<xs:element name="ScreenResults" type="import:ScreenResults" minOccurs="0" maxOccurs="1">
<xs:unique name="UniqueScreenResults">
<xs:selector xpath="ScreenResult" />
<xs:field xpath="@Type" />
</xs:unique>
</xs:element>
<!--============ ScreenResults =============-->
<xs:complexType name="ScreenResults">
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="ScreenResult" minOccurs="3" maxOccurs="3">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="enum:ScreenResult">
<xs:attribute name="Type" type="enum:ScreenType" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<!--============= ScreenType =============-->
<xs:simpleType name="ScreenType">
<xs:restriction base='xs:token'>
<xs:enumeration value='Screen Type …Run Code Online (Sandbox Code Playgroud) 如果我想要选择尚未处理的表中的所有记录,然后更新这些记录以反映它们已被处理,我将执行以下操作:
SELECT * FROM [dbo].[MyTable] WHERE [flag] IS NULL;
UPDATE [dbo].[MyTable] SET [flag] = 1 WHERE [flag] IS NULL;
Run Code Online (Sandbox Code Playgroud)
如何确保UPDATE仅对我刚刚选择的记录起作用,即,防止在我的SELECT之后但在我的UPDATE之前由另一个进程发生的[flag] = NULL添加的任何记录的UPDATE?我可以在事务中包装这两个语句吗?我必须把锁放在桌子上吗?
我在VS2010中使用C#for WinForms应用程序,我需要创建一个目录,其中路径对于.NET方法而言太大(我相信248字符串限制),并且跨越了谷歌的建议以使用Unicode Win32 CreateDirectory( ).我最初尝试使用Unicode调用它并传递参数,但在几次尝试失败之后,我已经减少了代码并且使用了完全正确的代码:
http://www.pinvoke.net/default.aspx/Structures/SECURITY_ATTRIBUTES.html
我仍然得到同样的错误:
捕获到System.AccessViolationException Message =尝试读取或写入受保护的内存.这通常表明其他内存已损坏.
不可否认,我对调用Win32函数一无所知,我真的只是拉动我在网上找到的并试图学习.谁能告诉我我做错了什么?删除问题的非必要代码,我有:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.AccessControl;
using System.Text;
namespace RFCGenerator
{
[StructLayout(LayoutKind.Sequential)]
public struct SECURITY_ATTRIBUTES
{
public int nLength;
public IntPtr lpSecurityDescriptor;
public int bInheritHandle;
}
public class RFC
{
[DllImport("kernel32.dll")]
static extern bool CreateDirectory(string lpPathName, SECURITY_ATTRIBUTES lpSecurityAttributes);
protected void CopyDirectory(Uri Source, Uri Destination)
{
SECURITY_ATTRIBUTES lpSecurityAttributes = new SECURITY_ATTRIBUTES();
DirectorySecurity security = new DirectorySecurity();
lpSecurityAttributes.nLength = Marshal.SizeOf(lpSecurityAttributes);
byte[] src = …Run Code Online (Sandbox Code Playgroud)